2013-12-18 12 views
7

Jak sprawdzić, czy znak Unicode ma pełną szerokość?C++ sprawdź, czy znak Unicode ma pełną szerokość

użyć Win32/MFC

Przykładowo pełna szerokość A nie jest pełna szerokość pełna szerokość F nie szerokości.

+0

zdajesz sobie sprawę, że to jest nonsens. Ciąg nic nie znaczy, jeśli nie wiesz nic o kodowaniu. Zapraszam do obejrzenia tego miłego artyka, który powinien rzucić nieco światła na tę kwestię -> http://www.joelonsoftware.com/articles/Unicode.html – Pandrei

+1

+1 Twoje pytanie skłoniło mnie do nauki dzisiaj! – Roddy

+0

@Pandrei Nie polecałbym tego artykułu. Chociaż tworzy jeden lub dwa przydatne punkty, jest w nim także kilka błędów: na początek autor nie rozumie różnicy _UCS_ i _UTF_. –

Odpowiedz

-2

Co masz na myśli, mówiąc o "pełnej szerokości"? Szerokość znaku zależy od czcionki, w której jest wyświetlany.

Jeśli masz na myśli to, czy jest to znak jednobajtowy, czy nie, jest to nadal niezaznaczone: . Jedna bajtowa postać w jakim kodowaniu? W kodzie UTF-8 będzie to znak jednobajtowy, jeśli (i tylko jeśli) punkt kodowy jest mniejszy niż 128; jeśli używasz UTF-16 (prawdopodobnie, , ponieważ jesteś pod Windowsiem), po prostu porównaj znak z 128. Pojedynczy bajt kodujący w ISO 8859-1 (inne szerokie rozprzestrzenianie kodowania): porównaj z 256. Dla cokolwiek mniej niż 256, jednostka UTF-16 będzie numerycznie identyczna z punktem kodowym w ISO 8859-1 (czasami nazywane Łacińskim-1). Dla pojedynczego bajtu kodowanie ASCII (prawie nigdy nie używane dzisiaj, , ale większość wspólnych kodowań jest identycznych z pierwszym 128 kodem punktów), cokolwiek mniej niż 128 jest dobre.

+1

http://en.wikipedia.org/wiki/Halfwidth_and_fullwidth_forms – Roddy

+0

@Roddy To ma więcej sensu. Powinienem był znaleźć swoją drugą pełnowymiarową postać w moim kodowaniu Unicode. (Oczywiście oznacza to, że nie ma prostej odpowiedzi.) –

8

Należy pobrać East Asian Width postaci. Możesz to zrobić, parsując plik EastAsianWidth.txt z bazy danych znaków Unicode. Nie mogłem znaleźć interfejsu Win32 API, który zwraca te informacje, ale w Pythonie można na przykład użyć unicodedata.east_asian_width(unichr).

Zobacz Annex #11 dla tła problemu i więcej informacji.

+0

To jest poprawna odpowiedź. FWIW: różne pliki z konsorcjum Unicode zostały zaprojektowane w celu łatwego analizowania, więc nie powinno być zbyt trudno obrabiać tworzenie tabeli C++ z niego. (Zrobiłem to dla wielu innych takich plików.) –

+0

Czy istnieją inne języki poza wschodnioazjatyckim, które mają znaki o pełnej szerokości? – linquize

+0

Aby uzyskać pełniejszą dyskusję, zobacz tę odpowiedź: http://stackoverflow.com/a/9145712/53974 – Blaisorblade

Powiązane problemy