codepage

字符内码(charcter code)指的是用来代表字符的内码.读者在输入和存储文档时都要使用内码,内码分为

单字节内码 -- Single-Byte character sets (SBCS),可以支持256个字符编码.
双字节内码 -- Double-Byte character sets)(DBCS),可以支持65000个字符编码.主要用来对大字符集的东方文字进行编码.

codepage 指的是一个经过挑选的以特定顺序排列的字符内码列表,对于早期的单字节内码的语种,codepage中的内码顺序使得系统可以按照此列表来根据键盘的输入值给出一个对应的内码.对于双字节内码,则给出的是MultiByte到Unicode的对应表,这样就可以把以Unicode形式存放的字符转化为相应的字符内码,或者反之,在Linux核心中对应的函数就是utf8_mbtowc和utf8_wctomb。

多字节显示汉字的时候,会看前面一个字节的值,如果这个值大于0x7F那么就会把后面的若干个字节看做是一个字符,比如GB是把本字节和后面的一个字节拿来看做一个字符来显示。UTF-8会把后面的不定个字节拿来当一个字符显示。

宽字符显示汉字时,直接把两个字节的信息看做一个字符拿来显示。

内码是汉字在计算机内部存储,处理和传输用的信息编码。它必须与ASCII码兼容但又不能冲突。

所以把国标码两个字节的最高位置'1',以区别于西文,这就是内码。汉字的输入码称为"外码"。输入码即指我们输入汉字时使用的编码。常见的外码分为数字编码(如区位码),拼音编码和字形编码(如五笔)。
再说区位码,"啊"的区位码是1601,写成16进制是0x10,0x01。这和计算机广泛使用的ASCII编码冲突。为了兼容00-7f的 ASCII编码,我们在区位码的高、低字节上分别加上A0。这样"啊"的编码就成为B0A1。我们将加过两个A0的编码也称为GB2312编码,虽然 GB2312的原文根本没提到这一点。
内码是指操作系统内部的字符编码。早期操作系统的内码是与语言相关的.现在的Windows在内部统一使用Unicode,然后用代码页适应各种语言,"内码"的概念就比较模糊了。我们一般将缺省代码页指定的编码说成是内码。内码这个词汇,并没有什么官方的定义。代码页也只是微软的一种习惯叫法。作为程序员,我们只要知道它们是什么东西,没有必要过多地考证这些名词。
所谓代码页(code page)就是针对一种语言文字的字符编码。例如GBK的code page是CP936,BIG5的code page是CP950,GB2312的code page是CP20936。
Windows中有缺省代码页的概念,即缺省用什么编码来解释字符。例如Windows的记事本打开了一个文本文件,里面的内容是字节流:BA、BA、 D7、D6。Windows应该去怎么解释它呢?是按照Unicode编码解释、还是按照GBK解释、还是按照BIG5解释,还是按照ISO8859-1 去解释?如果按GBK去解释,就会得到"汉字"两个字。按照其它编码解释,可能找不到对应的字符,也可能找到错误的字符。所谓"错误"是指与文本作者的本意不符,这时就产生了乱码。
答案是Windows按照当前的缺省代码页去解释文本文件里的字节流。缺省代码页可以通过控制面板的区域选项设置。记事本的另存为中有一项ANSI,其实就是按照缺省代码页的编码方法保存。
Windows的内码是Unicode,它在技术上可以同时支持多个代码页。只要文件能说明自己使用什么编码,用户又安装了对应的代码页,Windows就能正确显示,例如在HTML文件中就可以指定charset。
有的HTML文件作者,特别是英文作者,认为世界上所有人都使用英文,在文件中不指定charset。如果他使用了0x80-0xff之间的字符,中文Windows又按照缺省的GBK去解释,就会出现乱码。这时只要在这个html文件中加上指定charset的语句,例如:
<meta http-equiv="Content-Type" content="text/html; charset=ISO8859-1">
如果原作者使用的代码页和ISO8859-1兼容,就不会出现乱码了。

当你在使用DOS系统或相关命令行工具时,可能会遇到“Missing Codepage”的提示。这是一种较为常见的错误提醒,特别是在处理涉及字符集转换的操作时。接下来我会详细解释这一现象及其背后原因,并提供一些解决方案。 ### 什么是Codepage? **Codepage(代码页)** 是计算机用于将特定的字节序列映射到对应的字符集合的一种机制。简单来说,它是一种编码表,规定了每个数值对应显示什么样的文字字符。不同的语言和地区可能需要各自的专用codepages来正确渲染本地化的文本内容。 例如,在简体中文环境下通常会用GBK或者是UTF-8作为标准编码;而在西欧国家则更多倾向于ISO-8859-1或者其他拉丁系别的变种形式。 当提到 "missing codepage" (缺失码表),就意味着当前运行环境缺少必要的配置文件或者支持库以解读来自另一套完全不同体系下的字符串表达式。 ### 可能触发此警告的情形 以下是几种可能导致 “Missing Codepage” 报错的情况: 1. **跨平台迁移数据** 将包含非ASCII字符的数据从一个操作系统复制粘贴到另一个并不兼容其内部默认设定的新主机上面时容易碰到这个问题。 2. **未安装适当的语言包** 某些旧版Windows版本若没有预先加载全部可能需要用到的各种国际间通用的标准字体及关联脚本也可能抛出这种异常消息。 3. **第三方应用程序自带资源不足** 部分独立发行的小型软件本身携带有限数量的基础国际化素材不足以覆盖所有潜在应用场景,因此一旦用户切换至它们未曾考虑过的区域设置便会崩溃告警。 ### 应对策略 针对上述各种可能性分别给出针对性建议如下所示: #### 方法一:检查并更改编码模式 如果是由于输入输出流之间存在差异所造成的误解读现象,那么可以试着通过修改cmd窗口启动参数的方式来强制指定统一使用的charset规则。比如添加chcp指令改变活动console session中的active page number: ```batch CHCP 65001 ; 切换成utf-8 mode under win platform. ``` 同时也要留意目标exe是否接受相应的CLI flags允许手动介入调整locale preferences等方面属性。 #### 方法二:扩充现有runtime capabilities 对于那些因缺乏必要支撑而导致的功能受限情况而言,则可通过下载追加官方提供的补充组件包的形式加以改善优化。典型案列包括但不限于MS Office附赠的日韩汉字补丁包之类的附加产品线延伸服务项目等。 此外还可以探索开源社区贡献出来的免费替代品选项同样能够达到预期效果比如说iconv lib之类的东西可供参考借鉴运用实践中去解决问题所在之处。 --- 以上就是围绕主题展开的相关阐述说明希望对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值