ホームページ  >  記事  >  バックエンド開発  >  C 11 では、異なるタイプの Unicode 文字列間でどのように変換しますか?

C 11 では、異なるタイプの Unicode 文字列間でどのように変換しますか?

Susan Sarandon
Susan Sarandonオリジナル
2024-10-26 17:23:30466ブラウズ

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

Unicode 文字列変換メソッド

さまざまなプログラミング シナリオで、異なるタイプの Unicode 文字列間の変換が必要になる場合があります。ただし、mbstowcs() および wcstombs() を使用する既存の方法には制限があります。これらのメソッドはマルチバイト文字セットとワイド文字列の間の変換を実行しますが、必ずしも UTF-16 または UTF-32 で機能するとは限らず、ロケールの wchar_t エンコーディングに依存します。

C でのより良いアプローチ11

C 11 では、次のような Unicode 文字列変換の新しいオプションがいくつか導入されました。

1。 std::wstring_convert

このテンプレート クラスは、文字列間の変換に便利なインターフェイスを提供します。これをさまざまな codecvt ファセットとともに使用して、UTF-8 から UTF-16、または UTF-8 から 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 などのさまざまな変換を処理できます。新しい Codecvt の特殊化

C 11 では、より使いやすい新しい codecvt の特殊化も導入されました:

<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>

これらの特殊化は、変換を容易にするために std::wstring_convert とともに使用できます:

<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>

注: Visual Studio 2010 では、typedef 型のテンプレート特殊化の制限により、これらの特殊化を使用すると問題が発生する可能性があります。このような場合は、デストラクターを使用して codecvt のサブクラスを定義するか、std::use_facet テンプレート関数を使用することをお勧めします。

3. UTF-32 と UTF-16 間の変換

C 11 は UTF-32 と UTF-16 間の直接変換を提供しないため、std::wstring_convert:

の 2 つのインスタンスを組み合わせることができます。
<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>

以上がC 11 では、異なるタイプの Unicode 文字列間でどのように変換しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。