我读过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