有点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然具有正确的标头)。因此,我搜索了将UTF-8转换为UTF-16的常用方法,发现应该使用中的模板<codecvt>
。
但是,现在不赞成使用它,我想知道执行相同任务的新通用方法是什么?
(完全不介意使用Boost,但除此之外,我更喜欢尽可能接近标准库。)
有点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然具有正确的标头)。因此,我搜索了将UTF-8转换为UTF-16的常用方法,发现应该使用中的模板<codecvt>
。
但是,现在不赞成使用它,我想知道执行相同任务的新通用方法是什么?
(完全不介意使用Boost,但除此之外,我更喜欢尽可能接近标准库。)
Answers:
std::codecvt
<locale>
不建议使用其自身的模板。对于UTF-8到UTF-16,仍然存在std::codecvt<char16_t, char, std::mbstate_t>
专门化的问题。
但是,由于std::wstring_convert
和和std::wbuffer_convert
标准转换构面一起已被弃用,因此没有任何简单的方法可以使用构面转换字符串。
因此,正如Bolas已经回答的那样:自己实现(或者您可以像往常一样使用第三方库)或继续使用不推荐使用的API。
[locale.codecvt]
codecvt_base和codecvt的位置进行任何更改<locale>
。但是,阅读文档后,我发现w {string,buffer} _convert也已被弃用,据我所知,这是唯一实际使用codecvt方面的唯一标准函数。因此,即使不提倡使用codecvt,实际上也没有任何简单的方法可以使用它们。您是否认为省略std::codecvt
文件是偶然的?
basic_filebuf
使用它。
新方法是...您自己编写。或仅依赖不推荐使用的功能。希望标准委员会在替换功能正常之前不会真正删除编解码器。
但是目前还没有。
std::codecvt
完全不推荐使用。