关于windows系统里locale、code page、ANSI编码的问题
最近把公司代码库里的代码同步下来之后编译了下,竟然出问题。问下同事说代码库肯定没问题,而我啥也没改,那到底那里出问题了呢?
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编码的问题的更多相关文章
- 全网最详细的Windows系统里PLSQL Developer 32bit的下载与安装过程(图文详解)
不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端32位,是远程连接,因此本地配置PLSQL Developer32位. PLSQL Develope ...
- 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解)
不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...
- 全网最详细的Windows系统里Oracle 11g R2 Client客户端(64bit)安装后的初步使用(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Client(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1) 打开服务(cmd— ...
- 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)安装后的初步使用(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 命令行方式测试安装是否成功 1) 打开服务(cm ...
- 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的完全卸载(图文详解)
不多说,直接上干货! 前期博客 全网最详细的Windows系统里Oracle 11g R2 Database(64bit)的下载与安装(图文详解) 若你不想用了,则可安全卸载. 完全卸载Oracle ...
- 全网最详细的Windows系统里Oracle 11g R2 Database服务器端(64bit)的下载与安装(图文详解)
不多说,直接上干货! 环境: windows10系统(64位) 最好先安装jre或jdk(此软件用来打开oracle自带的可视化操作界面,不装也没关系:可以安装plsql,或者直接用命令行操作) Or ...
- 全网最详细的Windows系统里PLSQL Developer 64bit安装之后的一些配置(图文详解)
不多说,直接上干货! 注意的是: 本地若没有安装Oracle服务端,Oracle server服务端64位,是远程连接,因此本地配置PLSQL Developer64位. PLSQL Develope ...
- 全网最详细的Windows系统里PLSQL Developer 64bit的下载与安装过程(图文详解)
不多说,直接上干货! ORACLE是数据库,有客户端和服务器: 其,具体下载,可见http://www.oracle.com/technetwork/database/enterprise-editi ...
- windows系统里Cygwin中如何正确安装wget(图文详解)
具体步骤,见如下: https://ftp.gnu.org/gnu/wget/ 解压到Cygwin的主目录中,一般是 你的Cygwin目录/home/当前用户名/ . 我这是如下 先./c ...
随机推荐
- 【Python】Python点滴(一)——pip工具使用
首先我们来看一条命令:pip install uwsgi 这条命令按照操作名称,可以分为三个部分:pip.install和uwsgi.接下来,按照这样三个部分进行分析. pip pip类似于Rea ...
- [转]MongoDB c++驱动安装与使用
安装 获取源码:git clone https://github.com/mongodb/mongo-cxx-driver.git,解压 安装编译工具scons:yum install -y scon ...
- BZOJ - 3295 动态逆序对 (树状数组套treap)
题目链接 思路和bzoj2141差不多,不过这道题的数据更强一些,线段树套treapT了,树状数组套treap卡过~~ #include<bits/stdc++.h> using name ...
- 2018HN省队集训
HNOI2018省队集训 Day 1 流水账 T1 tree 换根+求\(lca\)+求子树和,一脸bzoj3083遥远的国度的既视感.子树和讨论一下就好了,\(lca\)?也是大力讨论一波. 先写了 ...
- timequest 中set input delay set output delay 的使用
set_input_delay/ set_output_delay TimeQuest出现以后,随之 set input delay 与 set output delay 也跟着出现,该约束命令用“外 ...
- css 样式常用属性
一般的一个DIV的CSS设置属性有:margin,padding,width,height,font-size,text-align,background,float,border 附:< cs ...
- 后缀数组模板/LCP模板
//后缀数组模板,MANX为数组的大小 //支持的操作有计算后缀数组(sa数组), 计算相邻两元素的最长公共前缀(height数组),使用get_height(); //计算两个后缀a, 和b的最长公 ...
- (转)Android studio 使用心得(五)—代码混淆和破解apk
这篇文章等是跟大家分享一在Android studio 进行代码混淆配置.之前大家在eclipse上也弄过代码混淆配置,其实一样,大家可以把之前在eclipse上的配置文件直接拿过来用.不管是.cfg ...
- oracle版本及字符集查询
查询oracle版本:select * from v$version; 查询oracle字符集:select * from nls_database_parameters;
- CentOS 7 named设置主从复制
前两篇文章介绍了named的安装和配置forward. 本文将介绍named的主从复制. 在从named的配置中添加: zone "weiheng.ink" IN { type s ...