Wenn ich es gut verstehe, ist es möglich, sowohl Zeichenfolge als auch wstring zu verwenden, um UTF-8 Text zu speichern.std :: string und UTF-8 codierte Unicode
Mit char, ASCII-Zeichen nehmen ein einzelnes Byte, einige chinesische Zeichen nehmen 3 oder 4, usw. Das bedeutet, dass
str[3]
nicht notwendigerweise auf das 4. Zeichen zeigen.Mit
wchar_t
elbe, aber die minimale Menge der Bytes pro Zeichen verwendet wird, ist immer 2 (anstelle von 1 fürchar
) und eine 3 oder 4 Byte breiten Zeichen wird 2wchar_t
nehmen.
Richtig?
Also, was, wenn ich string::find_first_of()
oder , etc. mit solch einer seltsam kodierten Zeichenfolge verwenden möchte? Wird es funktionieren ? Behandelt die String-Klasse die Tatsache, dass Zeichen eine variable Größe haben? Oder sollte ich sie nur als Dummy-Feature-lose Byte-Arrays verwenden, in diesem Fall würde ich eher für einen wchar_t[]
Puffer gehen.
Wenn das nicht behandelt, zweite Frage: Gibt es Bibliotheken, die String-Klassen bereitstellen, die diese UTF-8-Codierung verarbeiten können, sodass str[3]
tatsächlich auf das dritte Zeichen zeigt (das wäre ein Byte-Array von Länge 1 bis 4))
Beachten Sie, dass, auch wenn 'str [3]' der vierte Codepunkt war, dies nicht unbedingt das vierte vom Benutzer wahrgenommene Zeichen ist. – delnan
@delnan _Ok Entschuldigung (Ich habe gerade einen Beispielartikel über wchar_t, Windows und UTF-16 ausgewählt). Da es für die Bearbeitung zu spät war, habe ich den Kommentar gelöscht, und hier ist wieder der Teil ohne den "umstrittenen" Link: _ Ich denke, dass die Größe von 'wchar_t' implementierungsdefiniert ist, also _nicht_ immer 2 Bytes. Außerdem (IIRC) Windows verwendet es, um etwas wie UTF-16, nicht UTF-8 zu speichern. Siehe http://en.wikipedia.org/wiki/Wide_character –