Hallo zusammen
Ich möchte hier nochmals sheels Eingabe erwähnen: strlen zählt die Länge des Strings in den Einheiten, die dem charset zu Grunde liegen. Im Falle von utf-8 heisst das die Anzahl Bytes, wenn du UTF-16 verwendest die Anzahl an 2-byte Elementen. Blackfog, du sagst es funktioniert bei dir überall ausser bei ä, ö, ü. Das ist ganz einfach zu erklären: Du verwendest utf-16 und strlen gibt dir entsprechend korrekt die Anzahl der UTF-16 Zeichen im String zurück, und das sind 14 (Früh sind nicht 5 sondern 4 Zeichen in einer normalen Umgebung). Wechselst du zu utf-8 erhälst du nun die Anzahl an Bytes in dem String, und das sind 5, da ü in utf-8 in 2 Bytes aufgeteilt wird. ABER: Das gilt nun auch zum Beispiel für das Wort Weiß. Da der Buchstabe ß in UTF-8 nicht als 1 Byte dargestellt werden kann wirst du auch hier eine Länge von 5 Bytes erhalten.
Mit anderen Worten: Mit UTF-8 bekommst du zwar gerade für den String die richtige Lösung, allerdings werden nicht nur ä, ö, ü doppelt gezählt sondern ganz viele andere auch.
Ein Beispiel hierzu aus C++, da man da das Charset im Code angeben kann:
http://ideone.com/HPRCj0
Viele Grüsse
Cromon
Ich möchte hier nochmals sheels Eingabe erwähnen: strlen zählt die Länge des Strings in den Einheiten, die dem charset zu Grunde liegen. Im Falle von utf-8 heisst das die Anzahl Bytes, wenn du UTF-16 verwendest die Anzahl an 2-byte Elementen. Blackfog, du sagst es funktioniert bei dir überall ausser bei ä, ö, ü. Das ist ganz einfach zu erklären: Du verwendest utf-16 und strlen gibt dir entsprechend korrekt die Anzahl der UTF-16 Zeichen im String zurück, und das sind 14 (Früh sind nicht 5 sondern 4 Zeichen in einer normalen Umgebung). Wechselst du zu utf-8 erhälst du nun die Anzahl an Bytes in dem String, und das sind 5, da ü in utf-8 in 2 Bytes aufgeteilt wird. ABER: Das gilt nun auch zum Beispiel für das Wort Weiß. Da der Buchstabe ß in UTF-8 nicht als 1 Byte dargestellt werden kann wirst du auch hier eine Länge von 5 Bytes erhalten.
Mit anderen Worten: Mit UTF-8 bekommst du zwar gerade für den String die richtige Lösung, allerdings werden nicht nur ä, ö, ü doppelt gezählt sondern ganz viele andere auch.
Ein Beispiel hierzu aus C++, da man da das Charset im Code angeben kann:
http://ideone.com/HPRCj0
Viele Grüsse
Cromon