Unicode、GBK、UTF-8、ASCII的编码简介
来源:互联网 发布:java调用电脑的摄像头 编辑:程序博客网 时间:2024/05/28 05:14
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做一一对应。
- Unicode/UTF-8/GBK/ASCII 编码简介
- Unicode、GBK、UTF-8、ASCII的编码简介
- 关于ASCII、GBK、Unicode、UTF-8编码
- unicode Ascii gbk字符集和utf-8 utf-16编码
- 字符编码简介(ASCII,ISOXXX,GB2312,GBK,UNICODE,UTF-8)
- 编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头
- 编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头
- 编码格式简介:ASCII码、ANSI、GBK、GB2312、GB18030和Unicode、UTF-8,BOM头
- 字符编码简介:ASCII,Unicode,UTF-8
- 字符的编码方式 ASCII 、GBK 、UTF-8 、Unicode 、Unicode big endian
- Unicode、GBK、UTF-8、ASCII
- Unicode,ASCII,UTF-8,GBK
- 对于utf、unicode、GBK、ascII编码的一些浅显了解
- ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解
- ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码介绍
- ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解
- 字符编码ASCII、Unicode、UTF-8、iso8859-1、GBK、GB2312
- ASCII 、GB2312、GBK、GB18030、unicode、UTF-8字符集编码详解
- 创建并选择数据库
- C# 文件Http断点续传下载公共类
- win2003控制面板不见了,打开“控制面板”的方法,安全策略
- 表碎片起因及解决办法(zt)
- jvm初探
- Unicode、GBK、UTF-8、ASCII的编码简介
- 从零开始学习OpenGL ES
- SQL Mirror HA(SQL server的高可用性)[转载]
- ASP.NET服务器控件与客户端控件OnClientClick和OnClick的用法比较
- 警惕innerHTML赋值在IE下导致图片多次200的问题
- ZF 引用 FCKeditor 的 一次经验
- mysql 导入数据 LOAD DATA LOCAL INFILE
- .net attribute的使用之Conditional
- AWK高级应用