Bagaimanakah anda menukar antara pelbagai jenis rentetan Unicode dalam C 11?

Susan Sarandon
Lepaskan: 2024-10-26 17:23:30
asal
465 orang telah melayarinya

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

Kaedah Penukaran Rentetan Unikod

Penukaran antara pelbagai jenis rentetan Unikod mungkin diperlukan dalam pelbagai senario pengaturcaraan. Walau bagaimanapun, kaedah sedia ada untuk menggunakan mbstowcs() dan wcstombs() mempunyai hadnya. Walaupun kaedah ini melakukan penukaran antara set aksara berbilangbait dan rentetan aksara lebar, kaedah ini tidak semestinya berfungsi dengan UTF-16 atau UTF-32 dan ia bergantung pada pengekodan wchar_t setempat.

Pendekatan Lebih Baik dalam C 11

C 11 memperkenalkan beberapa pilihan baharu untuk penukaran rentetan Unikod, termasuk:

1. std::wstring_convert

Kelas templat ini menyediakan antara muka yang mudah untuk menukar antara rentetan. Ia boleh digunakan dengan faset codecvt yang berbeza untuk mengendalikan pelbagai penukaran, seperti UTF-8 kepada UTF-16 atau UTF-8 kepada 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>
Salin selepas log masuk

2. Pengkhususan Codecvt Baharu

C 11 juga memperkenalkan pengkhususan codecvt baharu yang lebih mudah digunakan:

<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>
Salin selepas log masuk

Pengkhususan ini boleh digunakan dengan std::wstring_convert untuk memudahkan penukaran:

<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>
Salin selepas log masuk

Nota: Visual Studio 2010 mungkin menghadapi masalah menggunakan pengkhususan ini disebabkan oleh pengehadan pengkhususan templat dengan jenis typedef. Dalam kes sedemikian, adalah disyorkan untuk mentakrifkan subkelas codecvt dengan pemusnah atau menggunakan fungsi templat std::use_facet.

3. Menukar Antara UTF-32 dan UTF-16

Memandangkan C 11 tidak menyediakan penukaran langsung antara UTF-32 dan UTF-16, anda boleh menggabungkan dua kejadian std::wstring_convert:

<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>
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah anda menukar antara pelbagai jenis rentetan Unicode dalam C 11?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan
Tentang kita Penafian Sitemap
Laman web PHP Cina:Latihan PHP dalam talian kebajikan awam,Bantu pelajar PHP berkembang dengan cepat!