`
mgoann
  • 浏览: 254020 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

Unicode、GBK、UTF-8、ASCII的编码简介

    博客分类:
  • Java
阅读更多

Unicode、GBK、UTF-8、ASCII的编码简介

 

Java当中的编码,一直对java中的编码有些模糊,由于现网的一个中文乱码的问题,让我好好将java中的编码研究了一番,不敢独享拿出来show一下。

 

都说java中的编码是Unicode,可以做到平台无关性,可是做java项目一年多了,根本没有见过Unicode编码格式是什么样子的,只使用过GBK,UTF-8,GB2312。下面是先来介绍下Unicode编码。

       Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112(16^4 * 17) 个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。在Unicode中:我们的“我”对应的数字是25105。在Unicode中,我们有很多方式将数字25105表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“我们”对应的数字是0x6211和0x4eec。

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112(16^4 * 17) 个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。在Unicode中:我们的“我”对应的数字是25105。在Unicode中,我们有很多方式将数字25105表示成程序中的数据,包括:UTF-8、UTF-16、UTF-32。UTF是“UCS Transformation Format”的缩写,可以翻译成Unicode字符集转换格式,即怎样将Unicode定义的数字转换成程序数据。例如,“我们”对应的数字是0x6211和0x4eec。

         看过上面的Unicode编码简介你应该心里有数了吧,Unicode其实就是一种规范,规定使用数字来映射字符,例如使用数字25105来映射中文字符”我”。而UTF-8,UTF-16,UTF-32其实是Unicode规范的一种实现方案,这里主要介绍UTF-8编码,UTF-8是ASCII的一个超集。因为一个纯ASCII字符串也是一个合法的UTF-8字符串,所以现存的ASCII文本不需要转换。为传统的扩展ASCII字符集设计的软件通常可以不经修改或很少修改就能与UTF-8一起使用。UTF-8字符集有广泛的工具支持,所以UTF-8字符集应用很广泛,特别是在对XML编码。

 

         UTF-8的特点是对不同范围的字符使用不同长度的编码。对于0x00-0x7F之间的字符,UTF-8编码与ASCII编码完全相同。UTF-8编码的最大长度是4个字节。从上表可以看出,4字节模板有21个x,即可以容纳21位二进制数字。Unicode的最大码位0x10FFFF也只有21位。而汉字0x0800-0xFFFF之间,所有UTF-8使用三个字节表示汉字。从Unicode到UTF-8的编码方式如下:

Unicode编码(16进制) ║ UTF-8 字节流(二进制)

  000000 - 00007F ║ 0xxxxxxx

  000080 - 0007FF ║ 110xxxxx 10xxxxxx

  000800 - 00FFFF ║ 1110xxxx 10xxxxxx 10xxxxxx

  010000 - 10FFFF ║ 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

 

GB2312(1980年)一共收录了7445个字符,包括6763个汉字和682个其它符号。汉字区的内码范围高字节从B0-F7,低字节从A1-FE,占用的码位是72*94=6768。其中有5个空位是D7FA-D7FE。

 

GB2312支持的汉字太少。1995年的汉字扩展规范GBK1.0收录了21886个符号,它分为汉字区和图形符号区。汉字区包括21003个字符。2000年的GB18030是取代GBK1.0的正式国家标准。该标准收录了27484个汉字,同时还收录了藏文、蒙文、维吾尔文等主要的少数民族文字。现在的PC平台必须支持GB18030,对嵌入式产品暂不作要求。所以手机、MP3一般只支持GB2312。

 

         从ASCII、GB2312、GBK到GB18030,这些编码方法是向下兼容的,即同一个字符在这些方案中总是有相同的编码,后面的标准支持更多的字符。在这些编码中,英文和中文可以统一地处理。区分中文编码的方法是高字节的最高位不为0。按照程序员的称呼,GB2312、GBK到GB18030都属于双字节字符集 (DBCS)。

 

GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号, 21003个汉字及提供了1894个造字码位。由于GBK同时也涵盖了Unicode所有CJK汉字,所以也可以和Unicode做一一对应。

分享到:
评论

相关推荐

    UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_

    UTF-8的优势在于对ASCII字符集的兼容性,前128个Unicode字符(包括英文、数字和常见符号)只需要一个字节表示,这使得UTF-8在互联网上广泛使用,因为其与ASCII的兼容性可以减少传输数据量。此外,UTF-8也支持全球大...

    ASCII、Unicode、GBK和UTF-8字符编码的区别联系

    ASCII、Unicode、GBK和UTF-8字符编码的区别联系

    JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    ### JAVA字符编码详解:Unicode, ISO-8859-1, GBK, UTF-8 及其相互转换 #### 一、引言 在Java编程中,字符编码的管理和转换是一项基本而又重要的任务。不同的编码标准适用于不同的场景,而理解和掌握这些编码之间...

    UTF-8 Unicode GBK GB2312 编码之间的区别和联系

    - 兼容ASCII编码,使得大多数英文文本可以不变地作为UTF-8存储。 - 通用性强,几乎包含了所有国家的语言文字。 - 变长编码机制使得常见字符占用的空间较少。 - **应用场景**:广泛应用于Web页面、电子邮件和其他...

    字符编码转换类,支持 ANSI、Unicode、Unicode big endian、UTF-8、UTF-8+Bom互相转换

    对于ASCII字符,UTF-8编码与ASCII相同,都是单字节。UTF-8的特殊之处在于它包含一个字节顺序标记(BOM),即UTF-8+BOM,但大多数情况下,UTF-8无BOM更常见。 在PHP中,进行字符编码转换可以使用内置函数,如`mb_...

    GBK 与 UTF-8 间编码转换

    相反,从UTF-8到GBK的转换则需要识别出UTF-8编码的字节序列,找到对应的Unicode码点,再查找这个码点在GBK编码中的对应双字节序列。 在进行编码转换时,需要注意以下几点: 1. 检查原始文件的编码格式,避免乱码...

    c gbk和 utf-8 转换

    UTF-8则是一种多字节的Unicode编码,可以表示世界上几乎所有的字符,包括中文、英文、日文等,其优点在于对ASCII字符(如英文)只用单字节表示,兼容性更强。 在C语言中,由于没有内置的GBK或UTF-8转换函数,我们...

    c语言gbk、utf8转换编码表及函数

    - 通常,从GBK转UTF-8需要将每个GBK编码的双字节序列转换为对应的Unicode码点,然后根据UTF-8的规则编码。 - 反之,从UTF-8转GBK则需要解析UTF-8编码的字节序列,找到对应的Unicode码点,再转换成GBK编码。 5. **...

    C#写的 GBK GB2312 UTF-8转换

    3. **UTF-8编码**:UTF-8是一种变长的Unicode编码方式,它可以表示Unicode字符集中所有的字符。UTF-8的优点在于对英文字符使用单字节,对于中文等非ASCII字符则使用多个字节,这使得它在互联网上得到了广泛应用,...

    GBK与UTF-8转码(C++)

    UTF-8编码最大的优点在于兼容ASCII,并且对于英文等拉丁语系的文字占用较少空间,因此被广泛应用于互联网传输和存储中。 #### 转换原理 在Windows操作系统中,通常使用`MultiByteToWideChar`和`...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    总之,C语言虽然没有内置的字符编码转换机制,但通过理解不同编码的原理和使用适当的库或API,可以实现UNICODE、GBK和UTF-8之间的转换。在进行这样的编程时,确保充分理解字符编码的细节,以及处理异常情况的方法,...

    关于JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换

    UTF-8编码可以很好地支持世界上大多数语言的文字,而且它的编码方式使得英文字符的存储空间与ASCII编码相同,对于多字节字符则占用更多空间。在Java中,UTF-8是最常用的编码格式之一。 #### 5. 字符编码之间的转换 ...

    UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_源码.zip

    这个压缩包文件"UTF-8toGBK_labview编码gbk_LabVIEWUTF-8_utf-8toGbk_源码.zip"主要涉及到两个常见的字符编码格式:UTF-8和GBK,以及如何在LabVIEW环境下进行编码转换。LabVIEW是美国国家仪器(NI)开发的一种图形化...

    常用编码(Unicode,UTF-8,GBK)转换工具

    本文将深入探讨标题中提及的几种编码方式:Unicode、UTF-8以及GBK,同时也会涉及到URL编码和XML转义,这些都是编程和网络通信中不可或缺的部分。 首先,Unicode是一个字符集,旨在为世界上所有语言提供一个统一的...

    utf-8.rar_c++ string utf-8_string to utf-8_utf_utf 8_utf-8

    然而,如果你从其他编码格式(如ASCII或GBK)转换到UTF-8,就需要使用编码转换函数。例如,可以使用iconv库进行这样的转换。 在处理UTF-8字符串时,常见的操作包括: 1. **字符遍历**:由于UTF-8的多字节特性,...

    UTF-8 UNICODE GBK 相互转换C源码

    UTF-8、UNICODE(也称为UCS-2或UTF-16)和GBK是三种常见的字符编码标准,它们在处理多语言文本时各有特点。本文将深入探讨这些编码方式,以及如何在C语言中进行相互转换。 首先,UTF-8是一种变长编码,它使用1到4个...

    字符编码简介(unicode-gbk-utf-8)

    在IT行业中,理解不同字符编码体系的重要性不言而喻,特别是Unicode、GBK和UTF-8这三种编码方式。下面将详细介绍这三种编码方式,并通过实例进行解析。 首先,Unicode是国际组织制定的一种标准字符集,旨在包含世界...

    简洁GBK UTF-8 UNICODE 转换工具

    在标题提到的“简洁GBK UTF-8 UNICODE转换工具”中,我们主要关注三种字符编码:GBK、UTF-8和Unicode。 1. **GBK编码**:GBK是中国大陆广泛使用的汉字编码标准,它是GB2312的扩展,兼容GB2312的同时增加了更多的...

    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

    各种编码UNICODE、UTF-8、ANSI、ASCII、GB2312、GBK详解

    GBK Unicode UTF8码的相互转换源程序(C#语言)

    UTF-8是最兼容且最广泛接受的Unicode编码,它可以表示Unicode中的所有字符,且对ASCII字符(英语字符)保持与ASCII编码的兼容性。UTF-8使用1到4字节的字节序列来表示一个字符,这样设计使得它在处理英文文本时效率更...

Global site tag (gtag.js) - Google Analytics