2013-10-05 23 views
5

Według FLTK 1.3.2 documentation:Jak wyświetlić Unicode za pomocą FLTK?

wsparcie Unicode dopiero niedawno została dodana do FLTK i jest nadal niekompletne.

Jednak po rzekomo realizowane:

Ważne jest, aby pamiętać, że początkowe wdrożenie Unicode i UTF-8 w FLTK obejmuje trzy ważne obszary:

  • przepis tablic znaków Unicode i niektórych prostych funkcji powiązanych
  • konwersja zmiennych * i parametrów funkcji z pojedynczego bajtu na reprezentatywny znak do UTF-8 o zmiennej długości
    sekwencje
  • modyfikacje interfejsu czcionki wyświetlacza w celu zaakceptowania ogólnego kodu Unicode lub numerów kodów UCS zamiast tylko znaków ASCII lub Latin1.

Moje pytanie brzmi: w jaki sposób mogę wyświetlić Unicode na moich kontrolkach FLTK? Nie mogę znaleźć żadnych funkcji widżetów akceptujących kod Unicode. Na przykład, jest to podpis dla funkcji label:

void Fl_Widget::label ( const char * text )

Odpowiedz

5

Z linku Wysłany:

FLTK zostanie całkowicie przekształcany do Unicode przy użyciu kodowania UTF-8. Jeśli system operacyjny bazuje na innym kodowaniu, FLTK w razie potrzeby dokona konwersji ciągu znaków.

Te trzy wypunktowane punkty są obszarami, które składają się na ich implementację obsługi Unicode; Oznacza to, że są to rzeczy, które robią lub planują zrobić.

  • FLTK realizatorzy będą dostarczać tabele znaków Unicode i kilka prostych funkcji związanych
  • FLTK realizatorzy jadą do konwersji char * zmiennych i parametrów funkcji z użyciem SBCS na UTF-8. (Oznacza to, że zamierzają ponownie zaimplementować funkcje i zmienne FLTK do traktowania ciągów znaków char * jako UTF-8.)
  • Implementatorzy FLTK zmodyfikują interfejs czcionek ekranowych tak, aby obejmował więcej niż tylko znaki ASCII i Latin1.

Moje pytanie jest, w jaki sposób faktycznie wyświetlić Unicode na moim kontroli FLTK? Nie mogę znaleźć żadnych funkcji widżetów akceptujących kod Unicode. Na przykład, jest to podpis dla funkcji etykiet:

void Fl_Widget::label (const char * text) 

Istnieje wiele osób, które niewłaściwie używają „Unicode” oznacza kodowania, który używa znaków 2-bajtowych. Dokumentacja FLTK, do której prowadzi link, nie czyni tego błędu.Rozumiejąc to, dokumentacja mówi całkiem jasno, w jaki sposób używasz Unicode z powyższym podpisem: Przekazujesz dane Unicode jako ciąg znaków char * za pomocą kodowania UTF-8. Na przykład, jeśli używasz kompilatora, który używa UTF-8 jako kodowanie wykonanie:

widget.label("кошка 日本国"); 

Lub jeśli masz kompilatora C++ 11:

widget.label(u8"кошка 日本国"); 
+0

Zauważ, że ostatnie bity wymagają kompilator, aby zrozumieć kodowanie pliku źródłowego zawierającego literał łańcuchowy. – rubenvb

+1

Dziękuję. W świetle Twojej odpowiedzi poświęciłem czas na [edukację na temat Unicode] (http://www.joelonsoftware.com/articles/Unicode.html). – JBentley

+0

@rubenvb: tak, i więcej: dla następnego przykładu kompilator * musi obsługiwać UTF-8 jako jego wąski zestaw znaków wykonawczych *, i np. Visual C++ tego nie robi, a dla ostatniego przykładu kompilator musi obsługiwać literalny prefiks C++ 11 'u8', a np. Visual C++ nie. W skrócie są to ** nieprzystające ** przykłady. Literały o szerokim łańcuchu są przenośne, ale muszą być konwertowane do UTF-8 w czasie wykonywania. –