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

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. 【Python】Python点滴(一)——pip工具使用

    首先我们来看一条命令:pip install uwsgi 这条命令按照操作名称,可以分为三个部分:pip.install和uwsgi.接下来,按照这样三个部分进行分析.   pip pip类似于Rea ...

  2. [转]MongoDB c++驱动安装与使用

    安装 获取源码:git clone https://github.com/mongodb/mongo-cxx-driver.git,解压 安装编译工具scons:yum install -y scon ...

  3. BZOJ - 3295 动态逆序对 (树状数组套treap)

    题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...

  4. 2018HN省队集训

    HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...

  5. timequest 中set input delay set output delay 的使用

    set_input_delay/ set_output_delay TimeQuest出现以后,随之 set input delay 与 set output delay 也跟着出现,该约束命令用“外 ...

  6. css 样式常用属性

    一般的一个DIV的CSS设置属性有:margin,padding,width,height,font-size,text-align,background,float,border 附:< cs ...

  7. 后缀数组模板/LCP模板

    //后缀数组模板,MANX为数组的大小 //支持的操作有计算后缀数组(sa数组), 计算相邻两元素的最长公共前缀(height数组),使用get_height(); //计算两个后缀a, 和b的最长公 ...

  8. (转)Android studio 使用心得(五)—代码混淆和破解apk

    这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...

  9. oracle版本及字符集查询

    查询oracle版本:select * from v$version; 查询oracle字符集:select * from nls_database_parameters;

  10. CentOS 7 named设置主从复制

    前两篇文章介绍了named的安装和配置forward. 本文将介绍named的主从复制. 在从named的配置中添加: zone "weiheng.ink" IN { type s ...