C++11有转换宽字符字符串的工具std::wstring
从/到 utf8 表示:std::codecvt
, std::codecvt_utf8
, std::codecvt_utf8_utf16
etc.
Windows 应用程序可使用哪一个来转换常规宽字符 Windows 字符串std::wstring
转为utf8std::string
?不配置区域设置是否总是有效?
取决于你如何转换它们。
您需要指定源编码类型和目标编码类型。
wstring
不是一种格式,它只是定义了一种数据类型。
现在通常当有人说“Unicode”时,意思是UTF16
这是什么微软Windows使用,这通常就是wstring
包含。
那么,从 UTF8 转换为 UTF16 的正确方法:
std::string utf8String = "blah blah";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
std::wstring utf16String = convert.from_bytes( utf8String );
反之亦然:
std::wstring utf16String = "blah blah";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> convert;
std::string utf8String = convert.to_bytes( utf16String );
并加剧混乱:
当你使用std::string
on a windows平台(就像当您使用多字节编译时),它不是UTF8。他们使用ANSI.
更具体地说,您的 Windows 使用的默认编码语言。
另外,请注意wstring 与 UTF-16 不完全相同 https://stackoverflow.com/questions/4247236/what-is-the-difference-between-utf-16-and-stdwstring.
以 Unicode 进行编译时,Windows API 命令需要以下格式:
CommandA - 多字节 - ANSI
CommandW - Unicode - UTF16
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)