现在的位置: 首页 > 综合 > 正文

字符编码FAQ

2013年03月07日 ⁄ 综合 ⁄ 共 3424字 ⁄ 字号 评论关闭
FAQ1: 什么是unicode编码?

Unicode是一种字符编码方法,不过它是由国际组织设计,可以容纳全世界所有语言文字的编码方案。是一种国际标准。Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCSUCS可以看作是"Unicode Character Set"的缩写。[编者言unicode是一种世界语言文字通用标准,不过关于世界语言文字的标准全球有2种:一是iso组织的iso10646, 另一种是软件制造商的协议unicode,当然一个世界出现2个标准是非常无聊的事情,所以这2套标准正在慢慢兼容。类似的网络协议也有2个标准:分别是iso7层协议以及软件制造商们的tcp/ip协议――事实上的使用标准,呵,国际标准总是落后与民间标准,真他妈的官僚]
UCS只是规定如何编码,并没有规定如何传输、保存这个编码。例如字的UCS编码是6C49,我可以用4ascii数字来传输、保存这个编码;也可以用utf-8编码:3个连续的字节E6 B1 89来表示它。关键在于通信双方都要认可。UTF-8UTF-7UTF-16都是被广泛接受的方案。UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。UTF“UCS Transformation Format”的缩写。
 
FAQ2:什么是utf编码?
utf8就是对unicode编码的一种实现, UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。
UTF-8就是以8位为单元对UCS进行编码。从UCS-2UTF-8的编码方式如下:
     UCS-2编码(16进制)      UTF-8 字节流(二进制)
     0000 - 007F         
0xxxxxxx
     0080 - 07FF         
110xxxxx 10xxxxxx
     0800 - FFFF         1110xxxx 10xxxxxx 10xxxxxx
 
FAQ3使用Windows记事本的另存为,可以在GBKUnicodeUnicode big endianUTF-8这几种编码方式间相互转换。同样是txt文件,Windows是怎样识别编码方式的呢?
ANSI字符集定义:ASCII字符集,以及由此派生并兼容的字符集,如:GB2312,正式的名称为MBCS(Multi-Byte Chactacter System,多字节字符系统),通常也称为ANSI字符集。
由于每种语言都制定了自己的字符集,导致最后存在的各种字符集实在太多,在国际交流中要经常转换字符集非常不便。因此,产生了Unicode字符集,它固定使用16 bits(两个字节)来表示一个字符,共可以表示65536个字符. 目前通用的实现方式是 UTF-16小尾序(BOM)、UTF-16大尾序(BOM)和 UTF-8。在微软公司附带的记事本中,“另存为”对话框可以选择的四种编码方式除去非 Unicode 编码的 ANSI 外,其余三种“Unicode”、“Unicode big endian”和“UTF-8”即分别对应这三种实现方式。
当一个软件打开一个文本时,它要做的第一件事是决定这个文本究竟是使用哪种字符集的哪种编码保存的。软件一般采用三种方式来决定文本的字符集和编码:
检测文件头标识,提示用户选择,根据一定的规则猜测

最标准的途径是检测文本最开头的几个字节,开头字节 Charset/encoding,如下表:

EF BB BF      UTF-8
FE FF           UTF-16/UCS-2, little endian
FF FE           UTF-16/UCS-2, big endian
FF FE 00 00  UTF-32/UCS-4, little endian.
00 00 FE FF  UTF-32/UCS-4, big-endian. 

FAQ4unicode中的汉字编码区域是什么?
1993年产生了包含中日韩(CJK)汉字的Unicode 汉字标准ISO 10646.1
ISO 10646.1汉字标准使用编码0x4E00-9FA5,共包含20902个汉字。其中:
大陆(S)提出的汉字17124个,台湾(T)提出的汉字17258; ST的并集,即中国(C)提出的汉字为20158个。日本(J)提出的汉字为12157个,中国未提出的690(Ja); 韩国(K)提出的汉字为7477个,其中中国未提出的90(Ka); JaKa并集共744字。
 
 
FAQ5ucs2, ucs4,utf8,utf16,utf32之间有什么关系?
UCS"Unicode Character Set"的缩写,UCS有两种格式:UCS-2UCS-4。顾名思义,UCS-2就是用两个字节编码,UCS-4就是用4个字节(实际上只用了31位,最高位必须为0)编码。目前的用于实用的 Unicode 版本对应于 UCS-2,使用16的编码空间。也就是每个字符占用2个字节
utf8就是对unicode编码的一种实现, UTF-8的一个特别的好处是它与ISO-8859-1完全兼容。
UTF-1616位为单元对UCS进行编码。对于小于0x10000UCS码,UTF-16编码就等于UCS码对应的16位无符号整数。对于不小于0x10000UCS码,定义了一个算法。不过由于实际使用的UCS2,或者UCS4BMP必然小于0x10000,所以就目前而言,可以认为UTF-16UCS-2基本相同。但UCS-2只是一个编码方案,UTF-16却要用于实际的传输,所以就不得不考虑字节序的问题。
  UTF-32

FAQ6gb2312中区位码与内码的关系?
GB2312的原文还是区位码,从区位码到内码,需要在高字节和低字节上分别加上A0
GB2312的原文是指国家1980年的一个标准《中华人民共和国国家标准信息交换用汉字编码字符集基本集 GB 2312-80》。这个标准用两个数来编码汉字和中文符号。第一个数称为,第二个数称为。所以也称为区位码。1-9区是中文符号,16-55区是一级汉字,56-87区是二级汉字。
内码是指计算机使用的缺省编码方式。早期操作系统的内码是与语言相关的.现在的Windows在内部统一使用Unicode,然后用代码页适应各种语言,“内码的概念就比较模糊了。微软一般将缺省代码页指定的编码说成是内码,在特殊的场合也会说自己的内码是Unicode,例如在GB18030问题的处理上。
  再说区位码,啊的区位码是1601,写成16进制是0x10,0x01。这和计算机广泛使用的ASCII编码冲突。为了兼容00-7fASCII编码,我们在区位码的高、低字节上分别加上A0。这样的编码就成为B0A1。我们将加过两个A0的编码也称为GB2312编码,虽然GB2312的原文根本没提到这一点。
 
FAQ7: 各种编码之间是否兼容?
ASCIIGB2312GBKGB18030的编码方法是向下兼容的。而Unicode只与ASCII兼容(更准确地说,是与ISO-8859-1兼容),与GB码不兼容。例如字的Unicode编码是6C49,而GB码是BABA
 
FAQ8:各种编码之间怎么进行转换?
unicode是一种世界语言文字的通用标准,各种不同的编码要进行相互转换,可通过unicode进行中转。如utf8要转化为gbk,就先要将utf8转化为unicode,然后又把unicode转换为gbk.
 
FAQ9:什么是codepage技术?
 
要关注的常识:
  XML及其子集HTML采用UTF-8作为标准字集
现在于HTML和XML,我们可以利用&#nnn;的格式显示特定的字符。nnn代表该字符的十进位Unicode代码。如果想采用十六进位代码的话,要在编码之前加上x字符。

抱歉!评论已关闭.