Unicode-string-Literale
C++11 führt eine Reihe neuer string-literal Prä - (und erlaubt sogar Benutzer-definierten Suffixe). Am Anfang dieser, können Sie direkt verwenden, um Unicode-escape-Sequenzen, um code, der ein bestimmtes symbol, ohne sich sorgen über die Codierung.
const char16_t* s16 = u"\u00DA";
const char32_t* s32 = U"\u00DA";
Aber kann ich die unicode-escape-Sequenzen in wchar_t
string-literalen? Es scheint ein Mangel, wenn dies nicht möglich war.
const wchar_t* sw = L"\u00DA";
Den integer-Wert von sw[0]
würde natürlich davon abhängen, was wchar_t
ist auf eine bestimmte Plattform, sondern um alle anderen Effekte, das sollte tragbar sein, nicht?
Ich glaube, dass der Wert von
Tatsächlich die oben ist falsch. Die Umsetzung soll zur Behandlung von universal-character-Namen, als wäre es der wörtliche Charakter. Also, wenn die Umsetzung übersetzt Zeichen in einem string-literal an die Ausführung Zeichensatz, dann sollte es so tun, mit UCNs als gut. Sie sind nur gewährleistet, die UTF-Codierung, wenn der UCN in einem unicode-Literale (z.B., u8"\u00DA").
sw[0]
hängt davon ab, was wchar_t
ist auf einer bestimmten Plattform nur in dem Umfang von der Größe des wchar_t
ist. I. e. \u00DA
sollte immer dazu führen, dass einige Unicode-Codierung (UTF-8, UTF-16, UTF-32) U+00DA, auch wenn das nicht die Plattform, die normale Codierung, die für diesen Datentyp.Tatsächlich die oben ist falsch. Die Umsetzung soll zur Behandlung von universal-character-Namen, als wäre es der wörtliche Charakter. Also, wenn die Umsetzung übersetzt Zeichen in einem string-literal an die Ausführung Zeichensatz, dann sollte es so tun, mit UCNs als gut. Sie sind nur gewährleistet, die UTF-Codierung, wenn der UCN in einem unicode-Literale (z.B., u8"\u00DA").
InformationsquelleAutor rubenvb | 2011-10-03
Du musst angemeldet sein, um einen Kommentar abzugeben.
Es würde funktionieren, aber es kann nicht der gewünschten Semantik.
\u00DA
wird erweitern Sie in so viele target-Zeichen als notwendig für UTF8/16/32-Kodierung, je nach Größe deswchar_t
, aber Bedenken Sie, dass weit Zeichenfolgen haben keine dokumentierte, garantierte Codierung Semantik -- Sie sind einfach "das system encoding", wird kein Versuch gemacht, zu sagen, was das ist, oder dass der Benutzer wissen, was das ist.So ist es am besten nicht zu mischen und anzupassen. Verwenden Sie entweder eine, aber nicht beide der beiden:
system-spezifische:
char*
/""
,wchar_t*
/L""
,\x
-Literalembstowcs
/wcstombs
Unicode:
char*
/u8""
,char16_t*
/u""
,char32_t*
/U""
,\u
/\U
Literale.(Hier sind einige Verwandte Fragen von mir zu diesem Thema.)
\x00DA
Linie. Ich Frage mich, ob ich könnte ersetzen Sie diese mit\u00DA
haben und es Arbeit für allewchar_t
's, die sind groß genug (also 16 oder 32 bit)/u ist für utf16, /U ist für utf32, was ist utf8? (und ich meine nicht den string prefix, dass die u8, ich meine den hex-Präfix innerhalb der Zeichenfolge)
Du meinst \ und nicht /? Das sind zwei verschiedene Dinge. Bitte beachten Sie auch, dass ich nie gesagt
\u
ist für UTF-16. Escape-Wert ist immer eine abstrakte codepoint (= Zahl); es ist nur, dass\U
wird eine 32-bit-Zahl und\u
nimmt eine 16-bit-Zahl. Ich bin mir nicht wirklich sicher, was eine korrekte version deiner Frage sein könnte, vielleicht so etwas wie ein 8-bit-eingeschränkte codepoint Referenz, d.h. codepoints im Bereich [0, 256)? Ich denke, das könnte existieren, aber es würde äußerst begrenztem Wert, da die meisten zeichenelemente sind leicht zugänglich über ASCII und brauchen nicht entkommen.InformationsquelleAutor Kerrek SB