Heim  >  Artikel  >  Backend-Entwicklung  >  Wie konvertiert man in C 11 zwischen verschiedenen Arten von Unicode-Zeichenfolgen?

Wie konvertiert man in C 11 zwischen verschiedenen Arten von Unicode-Zeichenfolgen?

Susan Sarandon
Susan SarandonOriginal
2024-10-26 17:23:30466Durchsuche

How do you convert between different types of Unicode strings in C  11?

Unicode-String-Konvertierungsmethoden

Die Konvertierung zwischen verschiedenen Arten von Unicode-Strings kann in verschiedenen Programmierszenarien erforderlich sein. Allerdings hat die bestehende Methode zur Verwendung von mbstowcs() und wcstombs() ihre Grenzen. Während diese Methoden Konvertierungen zwischen Multibyte-Zeichensätzen und breiten Zeichenfolgen durchführen, funktionieren sie nicht unbedingt mit UTF-16 oder UTF-32 und hängen von der wchar_t-Kodierung des Gebietsschemas ab.

Bessere Ansätze in C 11

C 11 führte mehrere neue Optionen für Unicode-String-Konvertierungen ein, darunter:

1. std::wstring_convert

Diese Vorlagenklasse bietet eine praktische Schnittstelle zum Konvertieren zwischen Strings. Es kann mit verschiedenen Codecvt-Facetten verwendet werden, um verschiedene Konvertierungen durchzuführen, z. B. UTF-8 in UTF-16 oder UTF-8 in UTF-32:

<code class="cpp">std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert;
std::string utf8_string = u8"This string has UTF-8 content";
std::u16string utf16_string = convert.from_bytes(utf8_string);</code>

2. Neue Codecvt-Spezialisierungen

C 11 führte außerdem neue Codecvt-Spezialisierungen ein, die einfacher zu verwenden sind:

<code class="cpp">std::codecvt_utf8_utf16<char16_t> // converts between UTF-8 and UTF-16
std::codecvt_utf8<char32_t> // converts between UTF-8 and UTF-32
std::codecvt_utf8<char16_t> // converts between UTF-8 and UCS-2</code>

Diese Spezialisierungen können mit std::wstring_convert verwendet werden, um Konvertierungen zu erleichtern:

<code class="cpp">std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert16;
std::string a = convert16.to_bytes(u"This string has UTF-16 content");</code>

Hinweis: Visual Studio 2010 kann bei der Verwendung dieser Spezialisierungen aufgrund von Einschränkungen der Vorlagenspezialisierung bei typisierten Typen Probleme haben. In solchen Fällen wird empfohlen, eine Unterklasse von codecvt mit einem Destruktor zu definieren oder die Vorlagenfunktion std::use_facet zu verwenden.

3. Konvertieren zwischen UTF-32 und UTF-16

Da C 11 keine direkte Konvertierung zwischen UTF-32 und UTF-16 bietet, können Sie zwei Instanzen von std::wstring_convert:

kombinieren
<code class="cpp">std::wstring_convert<std::codecvt_utf8_utf32<char32_t>, char32_t> convert32;
std::wstring_convert<std::codecvt_utf8_utf16<char16_t>, char16_t> convert16;
std::u32string utf32_string = u"This string has UTF-32 content";
std::string utf8_string = convert32.to_bytes(utf32_string);
std::u16string utf16_string = convert16.from_bytes(utf8_string);</code>

Das obige ist der detaillierte Inhalt vonWie konvertiert man in C 11 zwischen verschiedenen Arten von Unicode-Zeichenfolgen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn