是否可以为Visual C ++编译器设置执行字符集?
尝试将(UCN)字符串文字转换为宽字符串时,使用Visual Studio 2015进行编译时会发生运行时崩溃:
std::string narrowUCN = "\u00E4\u00F6\u00FC\u00DF\u20AC\u0040";
std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>, wchar_t> convertWindows;
std::wstring wide = convertWindows.from_bytes(narrowUCN); // Unhandled C++ exception in xlocbuf, line 426.
使用narrowUCN = u8"\u00E4\u00F6\u00FC\u00DF\u20AC\u0040"
有效,所以我假设执行字符集有问题吗?
答案 0 :(得分:1)
Since Visual Studio 2015 Update 2,可以使用编译器选项/utf-8
将执行字符集设置为UTF-8。然后,不使用u8
的窄字符串文字的转换将起作用。这是因为那些字符串文字然后被转换为UTF-8而不是系统的代码页(这是Visual C ++编译器的默认行为)。
选项/utf-8
是/source-charset:utf-8
和/execution-charset:utf-8
的同义词。从上面的链接:
在已经存在无BOM的UTF-8文件或更改为BOM的问题的情况下,使用/ source-charset:utf-8选项正确读取这些文件。
在Linux和Windows之间使用/ execution-charset或/ utf-8可以提供帮助,因为Linux通常使用无BOM的UTF-8文件和UTF-8执行字符集。
PS:不要将此与常见项目配置页面中的字符集设置混淆,后者仅设置宏Unicode / MBCS(历史原因)。