已弃用标头<codecvt>替换

时间:2017-03-22 08:32:30

标签: c++ utf-8 c++17 utf-16 codecvt

有点前景:我的任务需要将UTF-8 XML文件转换为UTF-16(当然还有正确的标题)。所以我搜索了将UTF-8转换为UTF-16的常用方法,并发现应该使用<codecvt>中的模板。

但现在当它是deprecated时,我想知道执行相同任务的新常用方法是什么?

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

3 个答案:

答案 0 :(得分:22)

别担心。

根据the same information source

  

此库组件应退回附件D,旁边,   直到合适的替代品标准化

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

答案 1 :(得分:16)

来自std::codecvt

<locale>模板本身并未弃用。对于UTF-8到UTF-16,仍有std::codecvt<char16_t, char, std::mbstate_t>专业化。

但是,由于std::wstring_convertstd::wbuffer_convert与标准转换构面一起被弃用,因此没有任何简单的方法可以使用构面转换字符串。

所以,正如Bolas已经回答的那样:自己实施(或者你可以像往常一样使用第三方库)或继续使用已弃用的API。

答案 2 :(得分:4)

新的方式是......你自己写的。或者只是依赖于已弃用的功能。希望标准委员会实际上删除 codecvt,直到有替代功能。

但目前还没有。