您的位置:首页 > 编程语言 > C语言/C++

C语言编程必备知识之一------------------汉字编码

2013-01-13 17:17 246 查看
C语言编程,基本的类型有字符型,整数型,浮点型。这些类型是我们对事物进行描述所必不可少的东西。即基础,又非常核心。所以必须掌握。
一、
字符集
ASCII
GB2312—>GBK-àGB18030
BIG5
ISO8859-1(欧洲)
S-JIS(日文编码)
Unified Hangul Code(韩文编码)
Unicode
ISO10646(UCS)
与ASCII兼容的编码有

GBK,BIG5,ISO8859-1,S-JIS,unified
Hangul Code。
这些编码都是ASCII的扩展编码,大部分为二字节编码。而且个个编码间互不兼容。之兼容ASCII。统称为ANSI
ISO10646也叫UCS,和Unicode是同一个东西,但由于组织不同所以叫法也不同。但是其编码是完全相同的。为了简便其间,可以统称为Unicode。

UTF是Unicode的存储方式有UTF-16,UTF-32,UTF-8。

二、
文件存储
在Windows的记事本中,文本有三种保存方式:
1.
ANSI

也就是ASCII+GBK。
2.
Unicode(UTF-16
用UTF-16方式存储Unicode编码。
UTF-16编码与Unicode编码完全一样。
UTF-16是一种定长存储方式。
对于UTF16字节序问题,可以在开头加入BOM。
BigEndian的话,FFFE
LittleEndian的话,FEFF
3.
UTF-8

用UTF-8方式存储Unicode编码。
UTF-8编码与Unicode编码不完全一样。但是由Unicode推出。
UTF-8是一种变长编码存储方式。
Unicode编码定长存储-----------UTF16
Unicode编码变长存储-----------UTF8
总结:

Unicode是字符的编码,UTF是Unicode编码的存储方式。

ANSI编码就是兼容ASCII的各种编码。其特点是ASCII码位不变,高位扩展。相互高位扩展之间(如GBK与BIG5)之间不兼容。

因此文字编码世界只有ANSI与Unicode在竞争了。

三、
ANSI与Unicode
1.ANSI可以存储
ASCII和GBK,
ASCII和ISO8859-1,(欧洲)
ASCII和BIG5
ASCII和JP编码(日文)
ASCII和KS编码(韩文)

其实大家可以发现,ANSI方式下,ASCII与本地码(GBK等)之间兼容,在使用上和存储上都完全没有问题。

问题只发生在
两套扩展集之间。即GBK与JP编码之间。由于都是高位扩展自ASCII,所以其编码区域难免出现重叠。就是同一个编码在中国和日本分别对应不同的字。
日本人给中国人发Email就会出现问题,由于编码不同,同一个Email,在JP编码和GBK编码中对应不同的字。所以理解就会出现问题--------乱码。
也就是ANSI编码会在不同语种间发生乱码问题。特别是不同语种间的Web,Email,ftp等等文字信息交换。
2.Unicode可以存储

世界上所有的文字,各种文字使用16位统一编码。

在世界任何地方,同一个符号的16位编码都相同。因此同一个编码,在世界各地不会有不同的解释,也就是Unicode具有唯一性。这就是统一编码的好处。
才用Unicode后,同一张网页,在世界任何地方都会有相同的解释,对应唯一的字符。这样中国人就可以自由的浏览日文网站,韩文网站,越南网站,欧洲网站了,只要它采用的是Unicode。
所以在Web时代Unicode的作用是不可替代的。
总结:

ANSI与Unicode的区别简单的例子

你的Web只允许中国人和美国人看,OK,用ANSI。

你的Web允许世界上任何人看,OK,用Unicode。

Unicode与UTF的关系

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: