我看到C++ 0x将添加对UTF-8,UTF-16和UTF-32文字的支持.但是这三种表述之间的转换呢?
我打算在我的代码中到处使用std :: wstring.但在处理文件和网络时,我还需要操纵UTF-8编码数据.C++ 0x是否也支持这些操作?
C++ 0x中,char16_t
并且char32_t
将用于存储UTF-16和UTF-32,而不是wchar_t
.
来自草案n2798:
22.2.1.4类模板codecvt
2类codecvt用于从一个代码集转换为另一个代码集,例如从宽字符到多字节字符或在宽字符编码(如Unicode和EUC)之间.
3表76(22.1.1.1.1)中要求的特化转换实现定义的本机字符集.codecvt实现简并转换; 它完全没有转换.专业化
codecvt
在UTF-16和UTF-8编码方案codecvt
之间进行转换,专业化在UTF-32和UTF-8编码方案之间进行转换.codecvt
在本地字符集之间转换窄字符和宽字符.关于mbstate_t
在库实现者已知的编码之间执行转换的专门化.其他编码可以通过专门处理用户定义的stateT类型来转换.stateT对象可以包含任何对专用do_in或do_out成员进行通信的状态.
该事有关wchar_t
的是,它不会给你使用的编码任何保证.它是一种可以保存多字节字符的类型.期.如果你要编写软件,现在,你不得不忍受这一妥协.与C++ 0x兼容的编译器相差甚远.您可以随时尝试VC2010 CTP和g ++编译器.此外,wchar_t
在不同的平台上有不同的大小,这是另一个需要注意的事项(VS/Windows上为2个字节,GCC/Mac上为4个字节,依此类推).然后有像-fshort-wchar
GCC 这样的选项进一步使问题复杂化.
因此,最佳解决方案是使用现有库.追逐UNICODE错误不是最好的努力/时间使用.我建议你看看:
GNU libiconv
IBM的libicu
更多关于C++ 0x Unicode字符串文字的信息