为Visual C ++编译器设置执行字符集

时间:2017-05-02 13:33:48

标签: c++ visual-studio-2015

是否可以为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"有效,所以我假设执行字符集有问题吗?

1 个答案:

答案 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(历史原因)。

相关问题