Author: kagula
last update date: 2020-8-30
Environment: Visual Studio 2019 Community Version 16.7.2
content
在VS2019以前的VS C++编译器, 源代码中的中文字符串常量是什么字符编码, 编译运行后也是什么字符编码. 但是VS2019不一样, 中文的"测"字, 源代码中的中文字符串常量, 编码类型是UTF-8, 但是一运行程序, UTF-8编码的字符串常量内容"E6 B5 8B"就变成GBK编码"B2 E2", 然后下面的代码就导致了断言异常.
std::string sss("测");
assert(sss == "\xe6\xb5\x8b");
现在我们在字符串常量前加上u8标记
std::string sss(u8"测");
assert(sss == "\xe6\xb5\x8b");
程序顺利通过测试. 问题解决!
Supplementary
[1]设置iostream的中文字符编码, 示例
std::locale::global(std::locale("zh_CN.UTF-8"));