2011-11-01 83 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

相關問題