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做一一对应。
分享到:
相关推荐
Java、编码规范、Java编码规范、阿里巴巴、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里巴巴Java编码规范、阿里...
资源名称:Java安全编码标准内容简介:《java安全编码标准》是java安全编码领域最权威、最全面、最详细的著作,java之父james a. gosling推荐。不仅从语言角度系统而详细地阐述java安全编码的要素、标准、规范和最佳...
在Java编程中,中文编码问题是一个常见的挑战,尤其是在处理文本输入、输出以及网络通信时。本文将深入探讨Java中的中文编码问题,以及如何有效地解决这些问题。 首先,我们要了解字符编码的基本概念。字符编码是...
在Java编程语言中,判断文件或字符串的编码方式是一个常见的需求。这主要涉及到字符集的概念,如ASCII、ISO-8859-1、UTF-8等,它们用于将二进制数据转换为人类可读的字符。在Java中,有多种方法可以用来识别或检测一...
在Java编程语言中,文件编码转换是一个常见的任务,特别是在处理多国语言或者处理不同系统间的文件传输时。本文将深入探讨如何使用Java实现文件编码的转换,主要关注GB2312、UTF-8这两种常见编码格式之间的转换。 ...
深入分析 Java 中的中文编码问题(1) - Java综合 - Java - ITeye论坛.mht
在Java中实现哈夫曼编码,需要创建一个哈夫曼树类,包含节点的权值、左子节点和右子节点,以及构造哈夫曼树的方法。同时,需要一个优先队列来辅助构建过程。完成哈夫曼树后,可以通过遍历树生成每个像素值的编码,...
在Java编程语言中,BCD(Binary Coded Decimal,二进制编码的十进制)是一种特殊的数据编码方式,主要用于处理十进制数值。BCD编码将每个十进制数字映射为4位二进制表示,使得在计算机内部处理时能够更高效地进行十...
Java字符编码是编程中至关重要的一个概念,尤其是在处理多语言数据时。本文主要探讨了Java中与字符编码相关的基础知识,包括ISO8859-1、GB2312、GBK、Unicode以及UTF编码。 首先,ISO8859-1是一种早期的单字节编码...
### 深入分析Java中的中文编码问题 #### 一、引言 在软件开发过程中,尤其是涉及到国际化和多语言支持的应用中,编码问题一直是令开发者头疼的问题之一。尤其是在使用Java这种跨平台语言进行开发时,不同的操作...
本文旨在深入探讨Java中的编码格式,帮助开发者更好地理解和解决在开发过程中遇到的编码问题。 #### 二、编码的基本概念 首先我们需要了解为什么需要编码。简单来说,计算机只能识别数字,为了能够让计算机正确地...
JAVA安全编码规范参考文档深入分析了在Java开发中如何编写安全的代码,降低系统被攻击的风险。文档内容涵盖了安全编码的基本原则以及常见漏洞的安全编码方法。 一、安全编码基本原则 1. 所有输入数据都是有害的 在...
由于提供的文件内容包含了技术性质的详细说明,所以本段落将根据提供的文档内容概述Java中的编码知识,同时纠正识别错误并补充遗漏,确保知识的连贯性和准确性。 首先,文档中提到了Java中与字符编码相关的基本概念...
可以通过修改控制台设置或在Java程序中使用`System.setProperty("file.encoding", "UTF-8")`来设置Java默认编码。 6. 数据库编码 当Java程序连接数据库时,需要确保数据库的字符集与Java程序处理的编码一致。不匹配...
在IT领域,尤其是在通信协议和数据编码中,`TLV(Tag-Length-Value)`是一种常见的数据表示方式。本文将详细讲解如何在Java环境中实现TLV的编码与解码,并结合提供的`ber-tlv`资源进行分析。 TLV结构简单明了,由三...
本文主要研究了Java中中文编码问题,探讨了Java SE序的运行原理,分析了Java单机程序、在服务器上运行JSP、Servlets或EJB等产生中文乱码的原因,并提出了相应的解决方案。 一、Java中文编码问题的来源 Java程序...
在Java编程语言中,修改文件编码是一项常见的任务,特别是在处理不同源代码或数据文件时。本文将深入探讨如何使用Java来实现这一功能,主要关注以下几个关键知识点: 1. **字符编码的理解**:字符编码是将字符与二...
在Java开发过程中,有时我们需要确定一个文件的编码格式,以便正确地读取和处理其中的数据。标题提到的“JAVA获取文件编码格式”是一项常见的任务,特别是在处理来自不同来源的文本文件时。在这种情况下,我们可以...