尽管有选项启用它,但无法在VS C ++中使用unicode

时间:2018-04-19 14:26:35

标签: c++ unicode visual-studio-2015

我一直在我的代码中收到此警告:

warning C4819: The file contains a character that cannot be represented in the current code page (0). Save the file in Unicode format to prevent data loss

我已经使用高级保存选项完成了this question中的建议,并且在没有BOM的情况下保存了unicode,但这没有用;我在项目属性中尝试了“使用Unicode字符集”,但这也不起作用。为什么它无法处理unicode?作为参考,我有一行冲刺一个unicode字符:

sprintf(mac, "\x02\x60\x8c%c%c%c", (num >> 16) & 0xff, (num >> 8) & 0xff, num & 0xff);

1 个答案:

答案 0 :(得分:0)

就文件而言,

\x8c不是字符。它是一系列(ASCII)字符,编译器将在编译时尝试将其解释为字符(这是在您收到错误时)。

编译器将根据BOM是否记录文件是否采用Unicode编码。由于您在没有BOM的情况下保存了它,因此它将在您的本地代码页中进行解释,即Shift-JIS。

Wikipedia告诉我,在Shift-JIS中,\x8c是双字节字符的第一个字节。我怀疑下一个字节(\x25,这是'%'的值)不是有效的第二个字节。因此,编译器无法将\x8c映射到Unicode字符。

诊断消息具有误导性,因为它是在假设程序员将实际的Unicode代码点放入其源文件而不将其保存为Unicode文件的情况下编写的。