2501,VS自动设置编码

原文
你可通过/source-charset编译器开关告诉VS编译器,在读取源文件使用什么编码.如果未指定编码,则编译器会试猜测:
1,如果文件以UTF-16BOM开头,则按UTF-16解释源文件.
2,如果文件以UTF-8BOM开头,则按UTF-8解释源文件.
3,否则,默认在用户代码页解释源文件.

这些设置由可能导致与实际期望的文件编码不同步的你的项目配置决定.

对C和C++,至少可断定编译器配置和文件编码你的期望匹配.这样,如果VS秘密地把文件按UTF-8更改CP1252编码,如,1,你可强制编译器错误,来提醒你文件编码弄乱了.

//如果要确保它是`CP1252`
static_assert(''' == '\x92', "文件编码有问题");
//如果要确保它是`UTF-8`.
static_assert(L'' == L'\x2603', "文件编码有问题");

对代码页1252,我选择了符',这是代码页1252中的0x92代码单元,在资源文件中经常破坏.
如果按UTF-8保存文件,则按'0xE20x800x99三个字节编码,如果文件没有UTF-8BOM(并且你不用/source-charset选项),编译器会按美标解释这些符,在单引号间看到三个符,并产生"常数中太多符"错误.

统一,我使用雪人符,因为它不在常见的8位代码页中,因此如果意外按美标转换文件,雪人可能会变成问号抛静断失败.

VS,似乎真的很喜欢不告诉你时,偷偷地按UTF-8转换文件.如前,源码控制系统一般不会告诉你更改了编码,即很容易在审查代码中看不出来,从而意外地破坏文件.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值