最近把公司代码库里的代码同步下来之后编译了下,竟然出问题。问下同事说代码库肯定没问题,而我啥也没改,那到底那里出问题了呢?

VS2018报的错误是:error RC2001: newline in constant

百度下这个错误的原因,主要原因是定义的字符串常量两个引号之间有换行,跳到相应出错的代码位置处,大体可以解决这个编译错误。当然,这个问题只是表象。由于代码库里的代码编译肯定能通过,而且这些代码已经跑了很久了,不可能存在这么低级的编译问题。

那么问题出在哪呢?

答案是操作系统的设置。问题源自于windows本身的一个历史包袱吧,我大体简述下,自己对这个问题本身研究也不透彻,所以有问题请谅解:大体就是windows在支持国际化的道路上是推荐使用unicode的,毕竟一个编码标准就能支持这个世界上所有语言的所有文字,也就不存在乱码之类的问题了。但是windows也是半路才支持unicode的,在这之前一直是使用locale+ANSI编码标准的。这个是个什么玩意儿呢?大体就是可以通过控制面板里的一个选项来设置系统的locale,而系统会根据你的locale来选择在ANSI编码(严格说这个不能叫编码!!)模式下(相对于unicode而言,也就是文本编辑器如notepad++、VS的编辑器等检测到当前的文本文件的编码不是unicode)所使用的编码。比如如果locale是Chinese PRC,则此时ANSI编码为gb2312(或者gbk,反正是gb系的),而如果locale是English US的话,则ANSI编码对应扩展的ascii(貌似,没有求证)。说实话ANSI这个叫法着实蛋疼,很让人费解,因为ANSI本身是个标准委员会,不明就里的人根本不知道是说啥么。

回到刚刚的编译问题,由于这些代码通常实在locale为English US的情况下编译的,而代码文件本身不是unicode编码,所以就应该是使用扩展ascii来进行编码/解码。但由于我的locale是Chinese PRC,所以对于非unicode编码的文件系统是使用gb2312来解析的。嗯嗯,问题来了,文件的编码和解码所使用的标准不兼容,导致各种诡异问题。

这里想吐槽下微软在处理这种问题下遗留下的种种尾巴,不过咋说呢,问题本身太复杂,解决不好也不怪这样臃肿的大公司,谁还没有点顽疾呢。

关于编码的问题知乎上有讨论:

http://www.zhihu.com/question/20650946

可以参考下,可能讲的比我清楚。

另外,关于locale对应的ANSI编码,微软是叫code page的。locale与code page的对应可以参见:

http://www.science.co.il/language/Locale-Codes.asp?s=codepage

http://blog.csdn.net/whygosofar/article/details/4344252

没时间了解太多,有问题请谅解。

关于windows系统里locale、code page、ANSI编码的问题的更多相关文章

  1. 全网最详细的Windows系统里PLSQL Developer 32bit的下载与安装过程(图文详解)

    不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端32位,是远程连接,因此本地配置PLSQL Developer32位. PLSQL Develope ...

  2. 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)

    不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...

  3. 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1)   打开服务(cmd— ...

  4. 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)安装后的初步使用(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1)   打开服务(cm ...

  5. 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的完全卸载(图文详解)

    不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 若你不想用了,则可安全卸载. 完全卸载Oracle ...

  6. 全网最详细的Windows系统里Oracle 11g R2 Database服务器端(64bit)的下载与安装(图文详解)

    不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...

  7. 全网最详细的Windows系统里PLSQL Developer 64bit安装之后的一些配置(图文详解)

    不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端64位,是远程连接,因此本地配置PLSQL Developer64位. PLSQL Develope ...

  8. 全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)

    不多说,直接上干货! ORACLE是数据库,有客户端和服务器: 其,具体下载,可见http://www.oracle.com/technetwork/database/enterprise-editi ...

  9. windows系统里Cygwin中如何正确安装wget(图文详解)

    具体步骤,见如下: https://ftp.gnu.org/gnu/wget/ 解压到Cygwin的主目录中,一般是   你的Cygwin目录/home/当前用户名/ . 我这是如下     先./c ...

随机推荐

  1. 理解Scala中的Extractor

    引言 最近抱着<Programming in Scala>(英文第二版)在死啃Scala.在阅读第26章Extractor时,偶然在Stack Overflow上搜到一个帖子<Sca ...

  2. Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录

    Java IO,io,文件操作,删除文件,删除文件夹,获取文件父级目录 这里先简单的贴下常用的方法: File.separator //当前系统文件分隔符 File.pathSeparator // ...

  3. BZOJ1208 HNOI2004 宠物收养所 【非旋转Treap】

    BZOJ1208 HNOI2004 宠物收养所 Description 最近,阿Q开了一间宠物收养所.收养所提供两种服务:收养被主人遗弃的宠物和让新的主人领养这些宠物.每个领养者都希望领养到自己满意的 ...

  4. 深入了解 WPF Dispatcher 的工作原理(PushFrame 部分)

    在上一篇文章 深入了解 WPF Dispatcher 的工作原理(Invoke/InvokeAsync 部分) 中我们发现 Dispatcher.Invoke 方法内部是靠 Dispatcher.Pu ...

  5. ubuntu换系统下载路径源

    ubuntn默认下载路径的源是国外的下载很慢换成国内的下载路径会好很多 在ubuntu应用搜索框(左上脚那个)中输入software 1.software&Updates 应用点击softwa ...

  6. LeetCode 549. Binary Tree Longest Consecutive Sequence II

    原题链接在这里:https://leetcode.com/problems/binary-tree-longest-consecutive-sequence-ii/description/ 题目: G ...

  7. c++ template不能有cpp

    c++的template只能把生命和定义都放在.h文件里,不然会出错

  8. 【spring源码学习】spring的task配置

    =================spring线程池的配置策略含义========================== id:当配置多个executor时,被@Async("id" ...

  9. LG1155 双栈排序

    题意 Tom最近在研究一个有趣的排序问题.如图所示,通过2个栈\(S_1\)和\(S_2\),Tom希望借助以下4种操作实现将输入序列升序排序. 操作a 如果输入序列不为空,将第一个元素压入栈\(S_ ...

  10. hashids 了解

    用于隐藏真实的id 原理是从数字经过一个加盐(salted)算法产生一个哈希(hash)字符串.这样算法就是通过混淆使结果具有不可预测性,而唯一性依然由数字本身来达成,从而得到(类似 youtube ...