2013-12-18 3 views
7

Wie überprüft man, ob ein Unicode-Zeichen volle Breite hat?C++ prüfen, ob Unicode-Zeichen volle Breite hat

I Win32/MFC verwenden

Zum Beispiel ist volle Breite, A nicht die volle Breite ist, volle Breite ist, F nicht die volle Breite.

+0

Sie erkennen, dass die Frage Unsinn ist. Eine Zeichenfolge bedeutet nichts, wenn Sie nichts über die Codierung wissen. Bitte schauen Sie sich diesen schönen Artikel an, der etwas Licht in die Materie bringen sollte -> http://www.joelonsoftware.com/articles/Unicode.html – Pandrei

+1

+1 Ihre Frage hat mich dazu gebracht, heute etwas zu lernen! – Roddy

+0

@Pandrei Ich würde diesen Artikel nicht empfehlen. Während es ein oder zwei nützliche Punkte macht, gibt es auch ein paar Fehler darin: Für den Anfang scheint der Autor den Unterschied _UCS_ und _UTF_ nicht zu verstehen. –

Antwort

-2

Was meinen Sie mit "volle Breite"? Die Breite eines Zeichens hängt von der Schriftart ab, in der es angezeigt wird.

Wenn Sie meinen, ob es ein einzelnes Byte-Zeichen ist oder nicht, ist es immer noch nicht klar. Ein einzelnes Byte Zeichen in welcher Codierung? In UTF-8, wird es ein einzelnes Byte Zeichen sein, wenn (und nur wenn) der Codepunkt weniger als 128 ist; Wenn Sie UTF-16 verwenden (wahrscheinlich, , da Sie unter Windows sind), vergleichen Sie einfach das Zeichen mit 128. Ein einzelnes Byte Codierung in ISO 8859-1 (eine weite Verbreitung Codierung): Vergleich mit 256. Für alles, was weniger als 256 ist, ist die UTF-16-Einheit numerisch identisch mit dem Codepunkt in ISO 8859-1 (manchmal bekannt als Latin-1). Für das einzelne Byte Codierung ASCII (fast nie verwendet heute, aber meisten der gemeinsamen Codierungen sind damit identisch für die ersten 128 Code Punkte), alles weniger als 128 ist gut.

+1

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

+0

@Roddy Das macht mehr Sinn. Ich hätte sein zweites volles Zeichen in meiner Unicode-Kodierung nachschlagen sollen. (Das bedeutet natürlich, dass es keine einfache Antwort gibt.) –

8

Was Sie brauchen, ist die East Asian Width des Zeichens abrufen. Sie können dies tun, indem Sie die Datei EastAsianWidth.txt aus der Unicode-Zeichendatenbank analysieren. Ich konnte keine Win32-API finden, die diese Informationen zurückgibt, aber in Python können Sie beispielsweise unicodedata.east_asian_width(unichr) verwenden.

Siehe die Annex #11 für den Hintergrund des Problems und weitere Informationen.

+0

Dies ist die richtige Antwort. FWIW: Die verschiedenen Dateien aus dem Unicode-Konsortium wurden für einfaches Parsen entwickelt. Daher sollte es nicht allzu schwierig sein, daraus eine C++ - Tabelle zu erzeugen. (Ich habe das für eine Reihe anderer solcher Dateien getan.) –

+0

Gibt es noch andere Sprachen als Ostasiatische mit vollen Zeichen? – linquize

+0

Eine ausführlichere Erläuterung finden Sie in dieser Antwort: http://stackoverflow.com/a/9145712/53974 – Blaisorblade