C++ 不推荐使用的标题<;编解码器vt>;替换

C++ 不推荐使用的标题<;编解码器vt>;替换,c++,utf-8,c++17,utf-16,codecvt,C++,Utf 8,C++17,Utf 16,Codecvt,有一点前景:我的任务需要将UTF-8XML文件转换为UTF-16(当然要有合适的头)。因此,我搜索了将UTF-8转换为UTF-16的常用方法,发现应该使用中的模板 但现在,当它是,我想知道什么是新的共同方式做同样的任务 (完全不介意使用Boost,但除此之外,我更喜欢尽可能靠近标准库。)std::codevt模板本身并不被弃用。对于UTF-8到UTF-16,仍然存在std::codevt专门化 但是,由于标准转换方面不推荐使用std::wstring_convert和std::wbuffer_c

有一点前景:我的任务需要将UTF-8XML文件转换为UTF-16(当然要有合适的头)。因此,我搜索了将UTF-8转换为UTF-16的常用方法,发现应该使用
中的模板

但现在,当它是,我想知道什么是新的共同方式做同样的任务


(完全不介意使用Boost,但除此之外,我更喜欢尽可能靠近标准库。)

std::codevt
模板本身并不被弃用。对于UTF-8到UTF-16,仍然存在
std::codevt
专门化

但是,由于标准转换方面不推荐使用
std::wstring_convert
std::wbuffer_convert
,因此使用方面转换字符串并不容易


因此,正如Bolas已经回答的那样:自己实现它(或者您可以像往常一样使用第三方库)或者继续使用不推荐的API。

新方法是。。。你自己写的。或者仅仅依靠不推荐的功能。希望标准委员会不会真正删除codecvt,直到有一个功能正常的替代品


但目前还没有。

别担心。

根据:

该库组件应在附录D中,以及, 直到标准化了合适的更换件


因此,在新的标准化、更安全的版本完成之前,您仍然可以使用它。

但根据,所有标题都不推荐使用。不仅仅是typedef
std::codecvt
整体不受欢迎。@Nicolas该提案似乎不建议对
[locale.codecvt]
进行任何更改,其中定义了
头的codecvt\u基和codecvt。然而,阅读文档时,我可以看到w{string,buffer}\u convert也被弃用,据我所知,这是唯一实际使用codevt方面的标准函数。所以,即使codevt没有被弃用,也没有任何简单的方法来使用它们。您认为文档中省略
std::codevt
是偶然的吗?@user207933
basic_filebuf
使用它。这只是标准委员会一名成员的提议,尽管这是一个有影响力的提议。它没有说明提案是否被接受;如果是这样的话,在下一个标准出台之前(可能在20世纪20年代中期),它不会被弃用,而且可能要到2030年左右才会被删除。我想编译器将继续支持它一段时间。@RichardSmith称,P0618R0应用于C++17,这意味着自该标准修订版以来,折旧一直有效。问题在于:我需要最便携的方法来实现这一点。当然,总是有icu、iconv和各种其他LIB,但以前有一个相当直接的方法,涉及三行代码,现在它是一个纯粹的混乱。@login_not_failed not“was”,它仍然是,因为它没有被删除(并且暂时不会被删除),不幸的是,这是一厢情愿的想法。反对。建议显然是:“用户应该使用专用的文本处理库。”Visual Studio 2017在使用时会发出弃用警告。但是什么专用的文本处理库呢?希望如此,因为在没有其他选择的情况下弃用某些内容有点太容易了。