VisualStudio 编译警告 C4819 warning

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

5.参考

  • 中文字符编码标准Code Page
  • 浅谈文字编码和Unicode
  • 字符集和字符编码(Charset & Encoding)
  • 十分钟搞清字符集和字符编码

你可能感兴趣的:(VisualStudio 编译警告 C4819 warning)