[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: Bug#235759: libc6: iconv's replacement for "German quotes in UTF-8" to latin1



Michael Piefel wrote:
Am Dienstag, den 18.10.2005, 12:14 +0100 schrieb Christian Mack:

Ich bin mir nicht sicher wann welche Variante gewählt wird, aber ich vermute,
die erste immer bei Framebuffersupport, die andere auf Textconsole.


Ich kann mir kaum vorstellen, dass in der C-Bibliothek eine
Unterscheidung in PC-Textmodus und Framebuffer vorgenommen wird. Das ist
die falsche Abstraktionsebene. Und zudem: _Meine_ Textkonsole kann mit
Zeichen jenseits von ASCII umgehen.

Das wird anhand der locale entschieden. Wenn iconv oder wcstombs versuchen, (wchar_t)0x201C in char[] umzuwandeln, gehen sie wie
folgt vor:
1. wenn es im CODESET (nl_langinfo(CODESET)) der locale eine
   Byterepräsentation für U+201C gibt (etwa weil CODESET UTF-8
   ist), dann wird in dieses umgewandelt.
2. wenn das nicht der Fall ist, wird überprüft, ob
   transliteration erlaubt ist. Wenn das nicht erlaubt ist,
   scheitert die Konvertierung.
3. ansonsten wird überprüft, ob U+00AB
   (LEFT-POINTING DOUBLE ANGLE QUOTATION MARK) im CODESET vorhanden
   ist. Falls ja, wird das genommen.
4. ansonsten wird überprüft, ob U+0022 (QUOTATION MARK) enthalten
   ist, dann wird das genommen. Das sollte eigentlich in jedem
   CODESET enthalten sein.
5. ansonsten scheitert die Konvertierung.

Mir ist nicht ganz klar, wie in Schritt 2 entschieden wird, ob
transliteration erlaubt ist. Bei iconv ist es klar: Wenn
der Zeichensatz auf //TRANSLIT endet (etwa ISO-8859-1//TRANSLIT),
dann wird transliteriert. Wie das bei wcstombs ist, ist mir
nicht klar. In gettext jedenfalls wird der iconv-Codec mit
//TRANSLIT geöffnet, sodass gettext(3) immer transliteration
durchführt.

Ciao,
Martin




Reply to: