Windows UTF8到UTF16

时间:2014-07-20 16:19:17

标签: c++ windows unicode utf-8

我一直在尝试使用C ++在BOM和UTF16 LE之间进行转换,以便在Windows上正确输出字符,而无需更改终端的字体。

我尝试更改代码页,但它们没有用。

我有2个问题,

  1. 如何将普通字符串转换为宽字符串?
  2. 创建一个将每个unicode字符映射到Windows代码页中的字符的C ++映射是不是一个坏主意?
  3. 例如,

    wcout << L"\u00A0" << endl;
    

    使用代码页850时,此代码在Windows上输出字母á。如何在Windows上将变量替换为"\u00A0"以将普通字符串转换为宽字符?

    我想要的是:

    wcout << Lsome_variable << endl;
    

    我意识到它不是有效的c ++语法,但有谁知道我怎么做到这一点?或者,如果有更好的方法吗?

1 个答案:

答案 0 :(得分:7)

如评论中所述,标准库现在提供诸如std::wstring_convert之类的内容(以及该页面的另请参阅部分中的其他函数/类)。

由于您使用的是Windows,WinAPI还具有转换功能。在这种情况下,您将寻找可用于将UTF-8转换为UTF-16的MultiByteToWideChar

在这些选项之间,某些内容应该适合您的用例。一般来说,您永远不需要编写自己的转化地图。