我讀過Stroustrup的Appendix D(特別要注意區域設置和的codecvt)。 Stroustrup沒有給出一個好的代碼和範例(恕我直言)。我一直在試圖從互聯網上旋轉東西,沒有任何快樂。我也嘗試灌輸stringstreams沒有成功。字符串轉換爲wstring的,編碼問題
會有人能夠顯示(和解釋)的代碼從UTF-8去一個UTF-16(或UTF-32)編碼? 注:我不知道輸入/輸出字符串的大小提前,所以我想到了解決辦法應該使用reserve
和back_inserter
。請不要使用out.resize(in.length()*2)
。
完成後,這將是巨大的,如果代碼實際工作(其驚人的多少斷碼就在那裏)。請確保以下'往返'。以下字節是UTF-8和UTF- {16 | 32}中'bone'的漢字。
const std::string n("\xe9\xaa\xa8");
const std::wstring w = L"\u9aa8";
我對一個基本問題表示歉意。在Windows上,我使用Win32 API,並且在編碼之間沒有這些問題。
沒有什麼可言,指出'wstring'必須是UTF-16(在Unix上,例如,'wchar_t'通常32位的)。因此,這本書沒有具體解決UTF-16的問題。此外,由於星體字符,您需要專門處理UTF-16中的代理對,並確保它們正確地轉換爲4字節的UTF-8序列(反之亦然)。 –
同意Chris(「沒有什麼說wstring必須是UTF-16」)。我相信唯一需要的是wchar_t至少是8位。對於什麼是值得的,我不在乎它的4,8或10個字節 - 我只是想要它轉換。 – jww