best practices fuer Dateinamen

26/12/2010 - 20:33 von Stefan Reuther | Report spam
Hallo,

ich habe hier ein Programm, das bisher mit einem ziemlich wilden Mix aus
Codeseiten arbeitet, und Multibyte-Encodings wie UTF-8 bisher gar nicht
unterstützt. Das will ich jetzt àndern. Mein eigenes System làuft aber
noch mit Latin-1.

Da ich die Codeseiten auf externen Schnittstellen noch brauche, möchte
ich nicht alles auf das libc-Locale umsetzen; ich möchte also z.B. auch
in einem Latin-1-Locale in der Lage sein, kyrillische Zeichen darzustel-
len. Damit bleibt für die interne Repràsentation nur Unicode (wchar_t).
Die wollte ich dann natürlich nach Möglichkeit für alles einsetzen.

Was macht man jetzt in einer solchen Situation am kleversten mit
Dateinamen? Insbesondere:
- was macht man mit Dateinamen oder Kommandozeilenparametern, bei denen
mbrtowc einen Fehler liefert? (z.B. Latin-1-Dateiname in UTF-8-
Locale)?
- mbrtowc und wcrtomb sind ja nicht garantiert zueinander invers,
Stichwort nicht-kanonisches UTF-8 oder unnötige Shift-Sequenzen.
Damit kann es nun passieren, dass ein Name einer existierenden Datei
übergeben wurde, nach der Übersetzung nach Unicode und zurück aber
nicht mehr existiert. Ist das in der Praxis ein Problem?
Gibt es zu dem Thema "best practices"-Dokumente o.à.?


Stefan
 

Lesen sie die antworten

#1 Volker Birk
26/12/2010 - 20:43 | Warnen spam
Stefan Reuther wrote:
Da ich die Codeseiten auf externen Schnittstellen noch brauche, möchte
ich nicht alles auf das libc-Locale umsetzen; ich möchte also z.B. auch
in einem Latin-1-Locale in der Lage sein, kyrillische Zeichen darzustel-
len. Damit bleibt für die interne Repràsentation nur Unicode (wchar_t).



Hallo,

Du wirfst hier einiges durcheinander. wchar_t gibt Dir noch lange kein
Unicode; das kriegst Du mittels UTF-8 auch in 8bit-Strings. Mit
16-Bit-Strings dagegen hast Du noch lange kein Unicode, denn auch UTF-16
hat variable Lànge.

Aus Erfahrung kann ich Dir ICU empfehlen, und dort die
UnicodeString-Klasse:

http://userguide.icu-project.org/

Lies Dir doch mal am besten die Einführung in Unicode durch.

Was macht man jetzt in einer solchen Situation am kleversten mit
Dateinamen? Insbesondere:
- was macht man mit Dateinamen oder Kommandozeilenparametern, bei denen
mbrtowc einen Fehler liefert? (z.B. Latin-1-Dateiname in UTF-8-
Locale)?



Was man auf der Kommandozeile bekommt, ist üblicherweise im Zeichensatz
des Terminals kodiert. Entsprechend sollte man dekodieren, d.h. nach der
aktuellen locale.

- mbrtowc und wcrtomb sind ja nicht garantiert zueinander invers,
Stichwort nicht-kanonisches UTF-8 oder unnötige Shift-Sequenzen.



Wie gesagt, wide chars haben mit Unicode zunàchst nichts zu tun.

Viele Grüsse,
VB.
Bitte beachten Sie auch die Rückseite dieses Schreibens!

Ähnliche fragen