我一直在我的代码中收到此警告:
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);
答案 0 :(得分:0)
\x8c
不是字符。它是一系列(ASCII)字符,编译器将在编译时尝试将其解释为字符(这是在您收到错误时)。
编译器将根据BOM是否记录文件是否采用Unicode编码。由于您在没有BOM的情况下保存了它,因此它将在您的本地代码页中进行解释,即Shift-JIS。
Wikipedia告诉我,在Shift-JIS中,\x8c
是双字节字符的第一个字节。我怀疑下一个字节(\x25
,这是'%'
的值)不是有效的第二个字节。因此,编译器无法将\x8c
映射到Unicode字符。
诊断消息具有误导性,因为它是在假设程序员将实际的Unicode代码点放入其源文件而不将其保存为Unicode文件的情况下编写的。