2016-09-19 20 views
0

我知道如果我在vs中使用unicode字符集,我可以使用L"There is a string"来呈现unicode字符串。当vs进行词法分析时,我认为There is a string将从srouce文件中读取,它会将There is a string解码为来自源文件编码的unicode。visual studio如何解析来自不同编码源文件的unicode字符串?

我已将源文件更改为某些不同的编码,但我总是从L marco获得正确的unicode数据。剂量与检测源文件的编码来隐藏There is a string来纠正unicode?如果不是,VS如何实现这一目标?

我不确定这个问题是否可以在SO中提出,如果不是,我应该问哪里?提前致谢。

+0

什么 “不同编码” 你试试? AFAIK,没有字节顺序标记字符的文件默认为“ANSI”(本地化的编码...美国的Windows是cp1252,但它因地区而异),否则,[BOM](https://en.wikipedia.org/ wiki/Byte_order_mark)字符作为文件中的第一个代码点标识一个UTF编码。 –

+0

@MarkTolonen我试过GB2312,UTF-8。那么vs会检测文件编码来隐藏unicode?是否有一些文件编码与不支持做这种转换? – zzy

+0

您使用的是什么本地化版本的操作系统?对于中文,GB2312可能是ANSI编码。我期望其他本地化失败或至少损坏字符,因为Windows不会将任何编码指示添加到文件,并将采用当前的ANSI编码。但是,UTF编码文件由VS编写,以BOM字符开头,该字符具有不同的UTF编码的特定签名。 –

回答

1

VS将不会在源文件开始时检测到没有BOM签名的编码。如果没有BOM存在,它将假设本地化的ANSI编码。

BOM签名标识使用的UTF8/16/32编码。因此,如果您将某些内容保存为UTF-8(VS将添加BOM)并删除前3个字节(EF BB BF),则该文件将在美国Windows上解释为CP1252,而在中文Windows上解释为GB2312等。

你是在中国的Windows上,所以要么保存为GB2312(不含BOM)或UTF8(含BOM),以便VS正确解码你的源代码。

https://en.wikipedia.org/wiki/Byte_order_mark

相关问题