`
desert3
  • 浏览: 2160591 次
  • 性别: Icon_minigender_1
  • 来自: 合肥
社区版块
存档分类
最新评论

Unicode万国码、UTF8、GB2312、GBK、ISO-8859-1

 
阅读更多
Unicode(統一碼、萬國碼、單一碼、標準萬國碼)是電腦科學領域裡的一項業界標準,用以統一地呈現和處理世界上大部分的文字系統,並為其編碼。
Unicode依照通用字符集(Universal Character Set)的標準來發展,同時也以書本的形式對外發表。Unicode至今仍在不斷擴增,每個新版本都加入更多新的字符。目前最新的Unicode第六版,除了已納入超過十萬個字符(Unicode的第十萬個字符在2005年獲採納,且認可成為標準之一),還包含可用作視覺參考的代碼圖表、編碼方法、標準的字符編碼,以及記錄了如大小寫字母等字符特性的列表這些資料。
在文字處理方面,Unicode 的功用是為每一個字元提供一個唯一的代碼(即一組數字),而不是一種字形。換句話說,Unicode是將字元以一種抽象的方式來呈現,而將視覺上的演繹工 作(例如字體大小、外觀形狀、字體形態、文體等)留給其他軟件來處理,例如網頁瀏覽器或是文字處理器。
差不多所有電腦系統都支援基本拉丁字母,并各自支持不同的其他编码方式。Unicode为了和它们相互兼容,其首256字元保留給ISO 8859-1所定義的字元,使既有的西歐語系文字的轉換不需特別考量;并且把大量相同的字元重複編到不同的字元碼中去,使得舊有紛雜的編碼方式得以和 Unicode編碼間互相直接轉換,而不會遺失任何資訊。

Unicode编码系统可分为编码方式和实现方式两个层次。
Unicode的编码方式与ISO 10646的通用字符集(Universal Character Set,UCS)概念相对应,目前实际应用的Unicode版本对应于UCS-2,使用16位的编码空间。也就是每个字符占用2个字节。这样理论上一共最多可以表示216即65536个字符。
实现方式
Unicode的实现方式不同于编码方式。一个字符的Unicode编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对Unicode编码的实现方式有所不同。Unicode的实现方式称为Unicode转换格式(Unicode Transformation Format,简称为UTF)

UTF-8(8-bit Unicode Transformation Format)是一種針對Unicode的[color=red]可變長度字元編碼,也是一种前缀码[/color]。它可以用來表示Unicode標準中的任何字元,且其編碼中的第一個位元組仍與ASCII相容,這使得原來處理ASCII字元的軟體無須或只須做少部份修改,即可繼續使用。因此,它逐漸成為電子郵件、網頁及其他儲存或傳送文字的應用中,優先採用的編碼。它对英文使用8位(即一个字节),中文使用24为(三个字节)来编码。

UTF-8使用一至四個位元組為每個字符編碼:
  • 1.128個US-ASCII字符只需一個位元組編碼(Unicode範圍由U+0000至U+007F)。
  • 2.帶有附加符号的拉丁文、希臘文、西里爾字母、亞美尼亞語、希伯來文、阿拉伯文、敘利亞文及它拿字母則需要二個位元組編碼(Unicode範圍由U+0080至U+07FF)。
  • 3.其他基本多文種平面(BMP)中的字元(這包含了大部分常用字)使用三個位元組編碼。
  • 4.其他極少使用的Unicode 輔助平面的字元使用四位元組編碼。

UTF-8编码字节含义
  • •对于UTF-8编码中的任意字节B,如果B的第一位为0,则B为ASCII码,并且B独立的表示一个字符;
  • •如果B的第一位为1,第二位为0,则B为一个非ASCII字符(该字符由多个字节表示)中的一个字节,并且不为字符的第一个字节编码;
  • •如果B的前两位为1,第三位为0,则B为一个非ASCII字符(该字符由多个字节表示)中的第一个字节,并且该字符由两个字节表示;
  • •如果B的前三位为1,第四位为0,则B为一个非ASCII字符(该字符由多个字节表示)中的第一个字节,并且该字符由三个字节表示;
  • •如果B的前四位为1,第五位为0,则B为一个非ASCII字符(该字符由多个字节表示)中的第一个字节,并且该字符由四个字节表示;

因此,对UTF-8编码中的任意字节,根据第一位,可判断是否为ASCII字符;根据前二位,可判断该字节是否为一个字符编码的第一个字节; 根据前四位(如果前两位均为1),可确定该字节为字符编码的第一个字节,并且可判断对应的字符由几个字节表示;根据前五位(如果前四位为1),可判断编码 是否有错误或数据传输过程中是否有错误。

GBK是国家标准GB2312基础上扩容后兼容GB2312的标准。GBK的文字编码是用双字节来表示的,即不论中、英文字符均使用双字节来表示,为了区分中文,将其最高位都设定成1。GBK包含全部中文字符,是国家编码,通用性比UTF8差,不过UTF8占用的数据库比GBD大。

GBK、GB2312等与UTF8之间都必须通过Unicode编码才能相互转换:
GBK、GB2312--Unicode--UTF8
UTF8--Unicode--GBK、GB2312

ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII一致,0x80-0x9F之间是控制字符,0xA0-0xFF之间是文字符号。
  ISO-8859-1收录的字符除ASCII收录的字符外,还包括西欧语言、希腊语、泰语、阿拉伯语、希伯来语对应的文字符号。欧元符号出现的比较晚,没有被收录在ISO-8859-1当中。
  因为ISO-8859-1编码范围使用了单字节内的所有空间,在支持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。换言之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。这是个很重要的特性,MySQL数据库默认编码是Latin1就是利用了这个特性。ASCII编码是一个7位的容器,ISO-8859-1编码是一个8位的容器。
  Latin1是ISO-8859-1的别名,有些环境下写作Latin-1。

try {  
	        // 汉字中以UTF-8编码为     %E4%B8%AD(3字节)
	        System.out.println(URLEncoder.encode("中", "UTF-8"));  
	        // 汉字中以UTF-8编码为     %3F      (1字节 这是由于汉字在ISO-8859-1字符集中不存在,返回的是?在ISO-8859-1下的编码)
	        System.out.println(URLEncoder.encode("中", "ISO-8859-1"));  
	        // 汉字中以UTF-8编码为     %D6%D0        (2字节)
	        System.out.println(URLEncoder.encode("中", "GB2312"));  
	          
	        // 把汉字中对应的UTF-8编码                 %E4%B8%AD 用UTF-8解码得到正常的汉字 中
	        System.out.println(URLDecoder.decode("%E4%B8%AD", "UTF-8"));  
	        // 把汉字中对应的ISO-8859-1编码    %3F       用ISO-8859-1解码得到?
	        System.out.println(URLDecoder.decode("%3F", "ISO-8859-1"));  
	        // 把汉字中对应的GB2312编码                 %D6%D0        用GB2312解码得到正常的汉字 中 
	        System.out.println(URLDecoder.decode("%D6%D0", "GB2312"));  
	        // 把汉字中对应的UTF-8编码                 %E4%B8%AD 用ISO-8859-1解码
	        // 得到字符中(这个就是所谓的乱码,其实是3字节%E4%B8%AD中每个字节对应的ISO-8859-1中的字符)
	        // ISO-8859-1字符集使用了单字节内的所有空间
	        System.out.println(URLDecoder.decode("%E4%B8%AD", "ISO-8859-1"));
	        // 把汉字中对应的UTF-8编码                 %E4%B8%AD 用GB2312解码
	        // 得到字符涓�,因为前2字节 %E4%B8对应的GB2312的字符就是涓,而第3字节%AD在GB2312编码中不存在,故返回?
	        System.out.println(URLDecoder.decode("%E4%B8%AD", "GB2312"));  
	    } catch (UnsupportedEncodingException e) {  
	        // TODO Auto-generated catch block  
	        e.printStackTrace();  
	    }  
分享到:
评论

相关推荐

    utf8-gb2312-unicode批量转码工具

    UTF-8、GBK(GB2312)和Unicode是三种常见的字符编码标准,它们各有特点,但也有各自的适用场景。 首先,UTF-8是一种变长的 Unicode 字符编码,它广泛应用于互联网和现代操作系统中。UTF-8的优点在于它可以完美兼容...

    汉字编码转换工具(汉字与utf-8转换 gb2312转换 unicode 转转

    本工具涵盖了三种主要的汉字编码格式:UTF-8、GBK(GB2312)以及Unicode,它们各自有其特点和使用场景。 首先,UTF-8是一种变长的Unicode编码,广泛应用于互联网和现代操作系统。它使用1到4个字节来表示一个字符,...

    中文 Big5/GBK/Unicode/UTF8 内码转换器

    《中文编码转换器详解:Big5、GBK、Unicode与UTF8的互换之道》 在计算机世界里,字符编码是沟通人类语言与机器之间的重要桥梁。本文将详细讲解标题所提及的“中文 Big5/GBK/Unicode/UTF8 内码转换器”这一工具,...

    UNICODE GBK双向码表二进制文件

    GBK编码,又称为GB2312-80的扩展,是中国大陆广泛使用的汉字编码标准,它是基于ISO-8859-1(西文字符)的基础上扩展的,主要针对简体中文,包括了大部分的汉字和一些非汉字符。GBK使用2个字节来表示一个字符,最多...

    GB和UNICODE互换码表+查找函数

    Unicode有多种实现方式,如UTF-8、UTF-16等,其中UTF-8是最常见的,它使用1至4个字节来表示一个字符。 提供的压缩包中包含以下四个文件: 1. **GBK转unicode码表.txt**:这是一个将GBK编码转换为Unicode编码的码表...

    GB2312_gb3212_unicode_

    在中文信息技术领域,GB2312、GBK以及GB3212和Unicode都是常见的汉字编码标准。本篇文章将详细探讨这些编码系统,以及它们在转换过程中的重要性。 GB2312编码,全称为“汉字机内码”,是中国国家标准局于1980年制定...

    字符串转GB码, 和unicode码

    在Python中,字符串本身就是Unicode编码,因此,转换通常是指将其他编码(如GBK)的字符串转换为Unicode,这可以通过`decode`函数完成,例如`bytes.decode('utf-8')`。 在处理字符串与GB码、Unicode码之间的转换时...

    有关于当安装maven成功后javaweb会出现几个乱码问题,都会解决

    有关于当安装maven成功后javaweb会出现几个乱码问题,都会解决。 想解决java中文乱码问题也得了解一下...Linux系统默认使用的是ISO-8859-1编码,Win32系统默认使用的是GB2312编码。 Java的内核和class文件是基于unicode

    gb18030与unicode转换表

    UTF-8是最常见的Unicode编码形式,它使用1到4个字节来表示一个字符,对于中文字符通常使用3个字节。 GB18030与Unicode之间的转换表,是为了在两个编码体系间进行数据交换而创建的工具。这个转换表列出了GB18030编码...

    方便的编码转换器

    "方便的编码转换器"是一个工具或程序,旨在简化中文字符与不同编码格式之间的转换过程,如GB2312、UTF-8以及Unicode。下面我们将深入探讨这些编码系统以及它们在实际应用中的作用。 首先,GB2312(简体中文国家标准...

    gb18030的汉字编码,Unicode汉字编码表

    Unicode,又称为万国码,是一种国际标准,旨在涵盖世界上所有语言的字符。Unicode使用统一的数字来表示每一个字符,可以是16位或32位,提供了超过140,000个字符的编码空间。在编程中,Unicode是跨语言、跨平台的标准...

    基于PHP的UCenterHome简体GBK与utf8源码.zip

    UTF-8则是一种万国码,支持全球所有语言,且具有前缀特性,方便解析。在UCenterHome中,GBK与UTF-8的切换涉及数据库、文件编码、页面输出等多个环节。 1. **数据库编码**:在UCenterHome中,数据库的编码设置至关...

    GB/BIG5/UTF-8 文件编码批量转换程序

    在处理中文文件时,常见的编码格式有GB(国标)、BIG5(繁体中文)以及UTF-8(万国码,Unicode的一个实现)。本程序“GB/BIG5/UTF-8 文件编码批量转换程序”就是为了解决在这些编码格式之间转换的问题,尤其对于大量...

    中英文字符编码查询

    本文将深入探讨“中英文字符编码查询”这一主题,包括ASCII码、区位码、GB2312码、Big5码、GBK内码、Unicode码、UTF-8码和UTF-16码。 首先,让我们从最基本的ASCII码开始。ASCII(美国标准信息交换代码)是一种7位...

    JEECMS 3.04 显示与模板标签字符 GBK UTF8对照

    相比之下,UTF-8是一种万国码(Unicode)的变种,能够表示Unicode标准中的所有字符,包括中文字符。在不同的系统环境下,尤其是跨平台时,选择正确的编码方式至关重要,否则可能会导致乱码问题。 描述中提到的...

    GB18030Tools

    1. 文件转换:支持批量转换GB18030编码的文本文件到Unicode(如UTF-8),反之亦然。 2. 字符查看:允许用户查看和比较不同编码下的字符表示,以便理解转换过程。 3. 预览与校验:在转换前后提供预览功能,确保转换...

    ecshop仿天猫模板 内附GBK,UTF8版本

    而UTF-8是一种万国码(Unicode)的实现方式,可以支持全球几乎所有的字符,包括各种语言的汉字、字母和符号,因此具有更广泛的应用范围。 ECShop模板是系统用户界面的核心部分,它决定了网站的外观和布局。仿天猫...

    汉字与unicode转换工具

    首先,通过GBK解码器将GBK编码的字节序列转化为码点,然后再用Unicode编码器将这些码点转换成UTF-8或其他Unicode编码格式的字节序列。 Unicode编码有多种实现方式,其中最常用的是UTF-8、UTF-16和UTF-32。UTF-8是最...

    Unicode码转换工具

    Unicode码,全称为统一码或万国码,是一种在计算机科学领域中用于表示文本的字符编码标准。它旨在为世界上所有语言提供一个独特的数字来表示每个字符,从而实现跨平台、跨语言的信息交换。Unicode码转换工具就是专门...

Global site tag (gtag.js) - Google Analytics