WinAPI - Spaß mit der Codepage
Verfasst: 10.04.2012, 16:17
Hallo Leute,
ich mal wieder. Hat jemand von Euch Erfahrungen mit den Ansi-WinAPI-Funktionen auf abgedrehten Sprachversionen? Die Standard-Codepage, in der SHGetFolderPath() und Konsorten ihre Pfade zurückgeben, ist ja anscheinend Latin1, auch CP1252 genannt. Die reicht für die meisten europäischen Sprachversionen ja aus, aber sicher nicht mehr für China, Japan oder arabische Staaten. Was also mache ich auf diesen Systemen, wenn der AppData-Pfad bunte Zeichen enthält?
Windows versteht nun leider kein UTF8. Ich müsste also konsequenterweise alles auf UTF16-Unicode umstellen und überall zwischen UTF16 und UTF8 konvertieren, was die ganze schöne Abwärtskompatibilität von UTF8 nachdrücklich ruiniert. Außerdem ist es ein Haufen Arbeit. Deckt vielleicht ein OpenSource-Filesystem wie z.b. Boost.Filesystem sowas ab?
Hintergrund: ich habe kürzlich auf die harte Tour gelernt, dass mein Spiel seine eigenen Dateien nicht mehr findet, wenn man es in einem Pfad mit Umlauten ablegt. Die Pfade, die ich von der WinAPI zurückbekomme, sind in den Ansi-Versionen Latin1. Und Latin1-Pfade werden auch von fopen() und Konsorten erwartet. Nur benutzt z.B. Boost.Locale irgendwas Anderes zum Öffnen seiner Sprach-Files und findet die prompt nicht, wenn man die Lib mit einem Latin1-Pfad einrichtet. Ich bau da jetzt erstmal eine plumpe Konvertierung an dieser einen Stelle ein und verlasse mich drauf, dass Windows auch im Chinesischen mit den Pfaden umgehen kann, die es mir zurückgibt, aber ein ungutes Gefühl bleibt zurück. Daher würde mich interessieren, ob und wie ihr damit bisher umgegangen seid.
Und ich frage mich gerade, wieviele Spiele da draußen noch damit umgehen könnten...
ich mal wieder. Hat jemand von Euch Erfahrungen mit den Ansi-WinAPI-Funktionen auf abgedrehten Sprachversionen? Die Standard-Codepage, in der SHGetFolderPath() und Konsorten ihre Pfade zurückgeben, ist ja anscheinend Latin1, auch CP1252 genannt. Die reicht für die meisten europäischen Sprachversionen ja aus, aber sicher nicht mehr für China, Japan oder arabische Staaten. Was also mache ich auf diesen Systemen, wenn der AppData-Pfad bunte Zeichen enthält?
Windows versteht nun leider kein UTF8. Ich müsste also konsequenterweise alles auf UTF16-Unicode umstellen und überall zwischen UTF16 und UTF8 konvertieren, was die ganze schöne Abwärtskompatibilität von UTF8 nachdrücklich ruiniert. Außerdem ist es ein Haufen Arbeit. Deckt vielleicht ein OpenSource-Filesystem wie z.b. Boost.Filesystem sowas ab?
Hintergrund: ich habe kürzlich auf die harte Tour gelernt, dass mein Spiel seine eigenen Dateien nicht mehr findet, wenn man es in einem Pfad mit Umlauten ablegt. Die Pfade, die ich von der WinAPI zurückbekomme, sind in den Ansi-Versionen Latin1. Und Latin1-Pfade werden auch von fopen() und Konsorten erwartet. Nur benutzt z.B. Boost.Locale irgendwas Anderes zum Öffnen seiner Sprach-Files und findet die prompt nicht, wenn man die Lib mit einem Latin1-Pfad einrichtet. Ich bau da jetzt erstmal eine plumpe Konvertierung an dieser einen Stelle ein und verlasse mich drauf, dass Windows auch im Chinesischen mit den Pfaden umgehen kann, die es mir zurückgibt, aber ein ungutes Gefühl bleibt zurück. Daher würde mich interessieren, ob und wie ihr damit bisher umgegangen seid.
Und ich frage mich gerade, wieviele Spiele da draußen noch damit umgehen könnten...