1.现象
编译C++代码,出现如下编译警告:
warning C4819: The file contains a character that cannot be represented in the current code page (936). Save the file in Unicode format to prevent data loss
2.原因
在代码中存在汉字注释,并且源文件的编码方式不是UTF-16 LE
3.解决
- 方法一:除掉所有汉字。编码注释统一使用英语(推荐,避免各种编码终极方法)。
- 方法二:将文件的编码方式改为UTF-16 LE,而不是UTF-8(可能在跨平台中,出现编码问题)。
- 方法三:在该文件的开始处加入警告禁止语句:
#pragma warning (disable:4819)
(不能跨平台)。
4.相关
字符集Charset:是一个字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形符号、数字等。一般由权威机构制定发布。常见字符集:ASCII字符集、GB2312字符集、BIG5字符集、GB18030字符集、Unicode字符集。
字符编码(Character Encoding):计算机要准确的处理各种字符集文字,需要进行字符编码,以便计算机能够识别和存储各种文字。
内码表CP(Code Page):代码页和字符集的含义基本相同,代码页规定了适用于特定地区的字符集合,和这些字符的编码。可以将代码页理解为字符和字节数据的映射表。OEM制定实现。
常用CP与Charset对照表
CodePage | Charset |
---|---|
CP936 | GBK |
CP20936 | GB2312 |
CP65001 | UTF-8 |
CP932 | Shift-JIS |