将 unicode 字符串作为 std::vector<unsigned short>

Working with unicode strings as std::vector<unsigned short>

本文关键字:unicode unsigned short gt lt 字符串 std vector      更新时间:2023-10-16

标准库将unicode字符串存储为。

std::vector<unsigned short> ustring;

我如何以可移植的方式进行这些转换?

convert ustring to std::wstring;
convert ustring to std::string;
convert ustring to std::vector<unsigned char>;
convert std::vector<unsigned char> to ustring;


编辑
字符串可能是UTF-16而不是UTF-8

libiconv、icu、UTF8-CPP等都可以这样做。据我所知,c++没有一种可移植的方式在UTF8/16/32之间进行转换。请记住,std::wstring在某些系统上是UTF16,而在其他系统上是UTF32。

  • 转换为宽字符串:使用iconv()

  • UTF8/16/32之间的转换:现在是c++ 11的内置功能,但尚未得到广泛支持。或者使用"iconv()"。也可以使用std::u16stringstd::u32string作为选择的数据类型(std::string用于UTF8)。

  • 从宽字符串到系统多字节窄字符串的转换:使用wcstombs()/mbstowcs()

这是我对过去关于这个主题的帖子的标准回应:Q1, Q2, Q3。