【发布时间】:2016-09-19 01:35:51
【问题描述】:
我知道如果我在 vs 中使用 unicode 字符集,我可以使用 L"There is a string" 来呈现一个 unicode 字符串。我认为There is a string会在vs进行词法解析时从srouce文件中读取,它将There is a string从源文件的编码解码为unicode。
我已将源文件更改为一些不同的编码,但我总是从L marco 获得正确的 unicode 数据。剂量与检测源文件的编码以隐藏 There is a string 以纠正 unicode ?如果没有,vs 是如何做到这一点的?
我不确定这个问题是否可以在 SO 中提出,如果不能,我应该在哪里问?提前致谢。
【问题讨论】:
-
您尝试了哪些“不同的编码”? AFAIK,没有字节顺序标记字符的文件默认为“ANSI”(本地化编码......美国 Windows 是 cp1252,但它因区域设置而异),否则,BOM 字符作为文件中的第一个代码点标识其中一个UTF 编码。
-
@MarkTolonen 我试过 GB2312,UTF-8。那么 vs 会检测文件编码为隐蔽的 unicode 吗?是否有一些文件编码与不支持进行此转换?
-
您使用的是哪个本地化版本的操作系统?对于中文,GB2312 可能是 ANSI 编码。我预计其他本地化会失败或至少会损坏字符,因为 Windows 不会向文件添加任何编码指示,并且会采用当前的 ANSI 编码。然而,UTF 编码文件是由 VS 编写的,以 BOM 字符开头,该字符在不同的 UTF 编码中具有特定的签名。
-
@MarkTolonen 是的,我正在使用 GB2312。所以如果我删除
BOM,它会无法转换吗? GB2312 是 ANSI,所以我对 vs 如何检测编码感到困惑。 -
没有 BOM,VS 采用 ANSI 编码。所以另存为 UTF8,去掉前 3 个字节(EF BB BF),文件将在美国 Windows 上被解释为 CP1252,但在中文 Windows 上被解释为 GB2312。 VS 不会检测到编码。如果没有 BOM,它只会假设一个。
标签: visual-studio unicode compilation