在这个链接中,您将找到我在下面复制的表1。请注意,该表第三列的标题指定为:UTF-16LE w/ or w/o BOM
。我能够保存包含以下片段的文件,
#include <iostream>
int main()
{
char c[] = u8"屰";
int i = 1;
}
通过选择VS2015中File
菜单下的菜单选项Advanced Save Options...
,其中Unicode codepage 1200
恰好与UTF-16LE encoding with BOM
对应。这可以在下面的第二张图片中查看,我粘贴了一份用二进制编辑器获得的文件图像的副本。可以看出,文件上的前两个字节是0xFF 0xFE
,表示UTF16-LE encoding
的BOM。但我在Advanced Save Options...
对话框中找不到用UTF-16LE encoding without BOM
保存文件的选项。我该怎么做?
表1-当前使用各种编码编译代码时的结果示例。
文件编码 | UTF-8 w/BOM | UTF-16LE w/或w/o BOMUTF-8w/o BOM | ||
---|---|---|---|---|
源文件中表示屰 | E5 B1 B0 | 70 5C | E5 B1B0 | 8C DB |
源转换 | UTF-8->UTF-8 | UTF-16LE->UTF-8 | 1252->UTF-8 | 1252->UTF-8 |
内部(UTF-8)表示法 | E5 B1 B0 | C3 A5 C2 B1 C2 B0 | C5 92 C3 9B |
这不是VS2015的选项。即使是流行的Notepad++也没有针对没有BOM的UTF-16的选项。
如果这样做只是为了实验,请在保存后使用任何十六进制编辑器删除BOM表。VS2015中内置了一个二进制编辑器。将文件保存为带有BOM的UTF-16LE后,使用二进制编辑器关闭并重新打开该文件,然后删除BOM。不过,我发现VS2015在没有它的情况下无法正确打开文件,这可能是该选项不可用的原因。