• 修改VISUAL STUDIO EXPRESS 2012新建C++文件编码


    • 本站文章除注明转载外,均为本站原创或者翻译。
    • 本站文章欢迎各种形式的转载,但请18岁以上的转载者注明文章出处,尊重我的劳动,也尊重你的智商;
    • 本站部分原创和翻译文章提供markdown格式源码,欢迎使用文章源码进行转载;
    • 本文标题:修改Visual Studio Express 2012新建C++文件编码
    • 本文链接:http://zengrong.net/post/1900.htm


    2013-12-03 更新:增加关于UTF-8(BOM)的说明


    我突然发现Visual Studio Express 2012(后简称为VS)建立的源文件是cp936(GB2312)编码,这个以后在Linux和Mac下面编译起来可能会有麻烦。

    初步解决

    于是,我尝试将已有项目中的文件改成了UTF-8格式,并设置保存格式为UTF-8,大概有这样几步:

    1. “工具-选项-环境-文档-不能以代码页的编码格式保存数据时将文档保存为Unicode”
    2. “工具-选项-文本编辑器-常规-自动检测不带签名的UTF-8编码”
    3. 在文件打开的情况下,选择“文件-高级保存选项”,设置编码和行尾
    4. 在另存文件的时候选择“编码保存”

    请原谅我使用中文描述界面,因为当时安装VS的时候手贱选了简中界面,然后无论如何都没法安装英文语言包……

    上面的1、2两项好像没什么用,关键是第3项。

    根据我的习惯,将编码设置为“Unicode(UTF-8无签名) – 代码页 65001”,将行尾设置为“Unix(LF)”。

    然后测试保存,再用Vim打开文件查看编码,发现文件确实保存为UTF-8编码了。

    但是(什么事情都有但是),当我重新打开这个文件的时候,重新查看“高级保存选项”,发现编码又变成了“简体中文(GB2312)-代码页936”。

    届时维尼奥神马!!!

    第二步解决

    我猜测,是由于VS无法识别不带签名的UTF-8编码文件造成的。

    要将一个文本文件被作为UTF-8编码对待,可能需要以下几个条件(或者之一):

    1. 文件中包含UTF-8签名;
    2. 文件中包含UTF-8编码的字符(不能全是ASCII可以解释的字符);
    3. 编辑器优先以UTF-8编码来解析。

    例如我对Vim的设置,就是将UTF-8侦测放在优先的位置

    那么,让我来验证一下猜测是否正确。

    在“高级保存选项”中将编码设置为“Unicode(UTF-8带签名) – 代码页 65001”,然后保存。重新打开,编码没有变化。

    这说明我的猜测是正确的。

    那么,再来验证一下上面条件的第2项是否正确。

    在“高级保存选项”中将编码设置为“Unicode(UTF-8无签名) – 代码页 65001”,加入一些中文内容,然后保存。重新打开,编码没有变化。

    那么,现在我可以断定,VS可以正常识别UTF-8编码,但我需要满足上面的条件1或者2。

    需要注意的是,即使是已有的项目中,所有文件都已经是UTF-8编码(例如cocos2d-x的项目模版),但使用VS打开并进行保存后,原来的文件编码都会变成CP936。这是因为原来的模版文件中的文件是UTF-8(无签名)的。至于解决方法,参考上面了。

    新建C++文件的编码

    修改下面这几个模版文件的编码和行尾值,在VS中新建的cpp或者h文件,默认就是UTF-8编码了(路径自己改):

    • c:Program Files (x86)Microsoft Visual Studio 11.0VCVCProjectItems_WDExpress ewc++file.cpp
    • c:Program Files (x86)Microsoft Visual Studio 11.0VCVCProjectItems_WDExpresshfile.h
    • c:Program Files (x86)Microsoft Visual Studio 11.0VCVCNewItems_WDExpress ewc++file.cpp
    • c:Program Files (x86)Microsoft Visual Studio 11.0VCVCNewItems_WDExpresshfile.h

    这些文件默认都是0字节的空文件,因此建议在其中加入一些注释,并将文件编码设置为UTF-8(带签名),行尾设置为Unix格式即可。

    如果希望修改更多的东西,比如wizard之类的,可以看看这篇文章:VS2008中自定义C++工程模板与修改新建文件默认编码的办法

    最后的问题

    这种修改默认文件模版为 UTF-8(带签名) 的方法,其实是不被推荐的,原因是这本来是微软一厢情愿的做法。而我们的项目本来就应该跨平台,这种文件在Mac平台下编译,可能会有问题。

    详见这篇:「带 BOM 的 UTF-8」和「无 BOM 的 UTF-8」有什么区别?网页代码一般使用哪个?

    但是,由于我 使用Eclipse+CDT开发Cocos2d-x(不用Visual Studio) 的尝试失败了,所以好像只能被迫接受这种现象了。

  • 相关阅读:
    腾讯分析系统架构解析
    GreenPlum简单性能测试与分析--续
    我的一些提高效率的设置
    Windows 上借助注册表来修改键盘按键的映射
    WPF入门——Converter、XAML和Style
    30个极大提高开发效率的Visual Studio Code插件(转)
    USB PD充电
    macOS Mojave 美化一下终端
    WPF入门(4)——资源
    使用Duilib开发Windows软件(5)——使用VLC做视频播放
  • 原文地址:https://www.cnblogs.com/lidabo/p/3910190.html
Copyright © 2020-2023  润新知