2011-11-01 85 views
2

库将unicode字符串存储为。使用unicode字符串作为std :: vector <unsigned short>

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

+1

你确定它们不是UTF-16字符串吗?将UTF-8存储为'unsigned short'向量在典型平台上浪费了50%的空间。 –

+0

你确定他们不只是*代码点*吗? – Dabbler

+0

图书馆的名称是什么? ustring到wstring应该没有问题,因为wstring是wchar_ts,它也应该是短小的。如果您希望保留内容,那么在使用字符串或字符时,您可能需要将UTF-16转换为UTF-8。如果你需要从char到ustring,你需要转换字符。看看libaray ICU。 – RedX

回答

2

libiconvicuUTF8-CPP,别人也可以做到这一点。 AFAIK,C++没有便携的方式在UTF8/16/32之间转换。请记住std::wstring在某些系统上是UTF16,而在其他系统上是UTF32。

+0

另外[UTF8-CPP](http://utfcpp.sourceforge.net/),它只是头文件而且使用起来非常简单。 –

+0

ICU(如果您已经使用了其余部分)在utf.h中也有类似的UTF转换宏。 –

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

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

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

这是我关于这个问题过去职位的标准响应:Q1Q2Q3

相关问题