文本字符编码及程序的编写(一)

其实文本字符编码一直是国际化的一个重要内容,但是这一系列文章并不是针对国际化的.windows系统采用的是gb系统的字符集,而我使用的ubuntu则采用的是utf-8的编码,这为我的工作带来了很多不便.所以总结一下相关的知识.

 


 

第一章 字符编码

 

首先要注意一点的是,字符编码就是将字母或汉字与一串二进制数相对应.在内存中的字符串要用到它.将文本保存在硬盘上时,也要用到它.之所以提前这个,是因为两者有时并不完全相同.

 

 

下面是一些常见的字符编码及其特点:

1. ASCII码

ASCII码的字符集应该是最小的一个,也是最见的一个了.占一个字节.

详细请见: ASCII百度百科

 

2.Latin-1(ISO 8859-1)

ASCII码并没有使用0xA0-0xFF的范围,而Latin-1正是扩展了这个范围得到的,大部分的欧洲语言都能搞定.当然占一个字节.

详细请见: ISO 8859-1百度百科

 

3. GB系统

3.1 GB2312(也叫cp936)

这一类编码就是我们学计算机编码时最早接触的一种汉字编码,一个汉字对应2个字节,而且每个字节的最高位都是1.而ASCII的最高位是0,所以GB2312与ASCII可以混合存储.

VC6中,如果没有做其它设置,一个含有中文字符串的占字符数的计算就是依据的这种编码.汉字占2个字节.

 

3.2 GBK

国家标准扩展,扩展了GB2312中未使用的码点(code points)以表示更多的字符,最多占用两个字节。

编码格式:
使用1位或2位进行编码
字节为00-7F的表示与ASCII完全一致,即是有96个字符和32个控制码。
最高位为1的字节表示该字节是两字节(表示更多字符)中的高字节,高字节范围为81-FE,第二个字节(低字节)范围为40-FE,或者80-FE。
在GBK的编码规范里,GB2312只是其中一个子集。

 

3.3 GB18030

一二四变长编码

详细请见: 中文的几个编码 GB2312、GBK、GB18030、GB13000、BIG5

 

4.  UNICODE(统一码、万国码、单一码)/UCS/UCS2/UCS4/utf-8/utf-16/utf-32

要完整的了解UNICODE请见:UNICODE百度百科

下面只简单总结几个要点:

1. UCS(universal character set)(由iso 10646定义)与UNICODE本是两个不同的项目,两个标准在字符编码位置上相同.

参见: unicode与iso 10646(UCS)的区别

UCS码表是31位的,但是在内存中,并不是用31位去表示一个UCS字符.

2. UCS-2、UCS-4.

UCS-2用两个字节编码,UCS-4用4个字节编码。UCS-4根据最高位为0的最高字节分成2^7=128个group。每个group再根据次高字节分为256个平面(plane)。每个平面根据第3个字节分为256行 (row),每行有256个码位(cell)。group 0的平面0被称作BMP(Basic Multilingual Plane)。将UCS-4的BMP去掉前面的两个零字节就得到了UCS-2。

3. UNICODE可分为编码方式与实现方式两个层次.

UNICODE用数字0x0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。

4. ASCII码在UTF-8中占一个字节.简体汉字在UTF-8中占三个字节.UTF-8编码的字节数可以从1个到6个.

5. 根据字节序的不同,UTF-16可以被实现为UTF-16LE或UTF-16BE,UTF-32可以被实现为UTF-32LE或UTF-32BE。

6. 关于BOM参见UNICODE百度百科

 

 

关于各种编码的一个较完整的表格可插找 这里 .而且这里提供了一种工具iconv ,可以将文本从一种编码(指定)转化为另一种编码(指定).

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值