1. 基本概念
文件编码格式
首先vs中编辑,保存文件实际上也是将文件内容以一定的编码格式存储。对于中文字符串
string s = "一";
按不同的编码格式保存后,通过16进制文件查看器,可以看到中文的编码是能对应上的。
开放高级保存选项
运行时数据格式
对于上述的代码,运行时断点可以看到s的具体数据内容,比如GB2312编码是0xD2BB,而如果是UTF-8编码的话则是0xE4B880。
2. 一些测试
我做了一些测试验证文件保存格式和运行时数据格式的关系。
文件格式 | 数据格式 |
GB2312 | GB2312 |
UTF-8 | UTF-8 |
UTF-8-BOM | GB2312 |
可以看到并不是完全对应的关系,可能时vs在里面做了一些转换。
尤其是当我们设置了/source-charset-utf-8选项后,不论文件是什么格式,数据都是GB2312格式。
3. u8
前面提到通过改变文件保存编码格式,可以将中文字符串以UTF-8格式保存到运行时,但是并不稳妥。下面介绍非常稳妥的方式。
u8
在字符串前面加上u8,表示让编译器将后面的字符串以UTF-8的格式保存到数据中。
string s = u8"一";
关键是,它还跨平台。