类编码介绍
常用的编码方式一览:
-
ASCII
用 7 位编码将英文字符和一些常用的符号存诸为从 0 到 127 的数值。
-
ISO-8859-1
法语、西 班牙语和德语之类的西欧语言都使用叫做ISO-8859-1 的编码系统(也叫做 “latin-1” )。它使用 7 位 ASCII 字符表示从 0 到 127 的字符, 但接着扩展到了 128-255 的范围来表示如 n 上带有一个波浪线 (241) ,和 u 上带有两个点 (252) 的字符等等。可以说 ASCII 是 ISO- 8859-1 的子集。
-
Unicode
Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数字0-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个码位。码位就是可以分配给字符的数字。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案。
-
UTF-8
UTF-8是一种变长的编码方式,每个 UTF-8 的编码可以是 1 至 6 个字节长。它将 Unicode 编码的字符采用变长的方式进行编码。对 Unicode 中 属于 ISO-8859-1 的编码采用和 ISO-8859-1 相同的单字节编码。其他字符采用两字节以上的编码。实际上对于两个字节的 Unicode 编 码, UTF-8 只要三个字节即可表示。第一个字节由 n 个 1 ( 1< n <= 6 )开始 , n 表示编码的字节数,后面每个字节都以 10 开始,后面 6 位为有效位。将第一位的剩余位和后面的所有字节的后六位连接起来就是对应的 Unicode 编码的数 值。
-
GB2312和 GBK
这两种编码都是汉字的编码标准,其中前者是后者的子集。GBK 编码的文本文档中对于 ASCII 中的字符用相同的单字节表示;对于汉字和汉语中的标点符号等 采用双字节编码,其中高字节大于 0x80 ,而 ASCII 的所有字符的编码均小于 0x80, 所以 ASCII 和 GBK 的字符是可以混和起来的。 GBK 的字符集和 Unicode 进行转换是无规则的,需要转换表才能进行转换。
注意 :
Character类,Character 类在对象中包装一个基本类型 char 的值。Character 类型的对象包含类型为 char 的单个字段。char 数据类型(和 Character 对象封装的值)基于原始的 Unicode 规范
,将字符定义为固定宽度的 16 位实体。Unicode 标准曾做过修改,以允许那些其表示形式需要超过 16 位的字符,合法代码点
的范围现在是从 U+0000 到 U+10FFFF,即通常所说的 Unicode 标量值
。(也就是上面介绍的unicode,原始unicode将在下面给出定义。)在character的isletter
方法中对于参数 是char 的方法是不支持对扩展字符的判断 而参数是int时 时支持对扩展字符的判断。
基于上面的介绍所以有:char
值表示 Basic Multilingual Plane (BMP) 代码点,其中包括代理项代码点,或 UTF-16
编码的代码单元。int
值表示所有 Unicode 代码点,包括增补代码点。
可以用下面方法检测:
Character.isSupplementaryCodePoint
(int codePoint)
确定指定字符(Unicode 代码点)是否在增补字符范围内。
原始unicode规范:
Unicode用一个 2 字节数字表示每个字符,从 0 到 65535 。每个 2 字节数字表示至少在一种世界语言中使用的一个唯一字符。(在多种语言中都使用的字符具有相同的数字码。)这样就确保每个字符一个数字,并且每个数字一个字 符。 Unicode 数据永远不会模棱两可。 Unicode 使用相同的数字表示 ASCII 和 ISO-8859-1 中的字符。只是这两种编码用一个字节表示, 而 Unicode 用两个字节表示。所以 Unicode 表示这两种编码的字符时只要用低字节就可以了,高字节为 0 。
一些疑惑解释:
- UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的编码方案,他们之间有什么区别?
解释: 用记事本创建一个文本文件,输入汉字“ 中 ” 分别保存为 Unicode 格式和 UTF-8 格式。 将 UltraEdit 的自动识别 UTF-8 文件格式选项禁止,然后用其打开这两个文件,选用二进制查看方式,可以看到 :
UTF-8格式文件编码为 “EF BB BF E4 B8 AD” 。其中有个三字节的前缀 “EF BB BF” ,这是 UTF-8 格式文本文件的标识。不过这个前缀不要,某些文本查看软件也可以通过编码判断出 UTF-8 格式。 “E4 B8 AD” 就是 “ 中 ” 的 UTF-8 编码。
Unicode格式的文件的完整编码是 “FF FE 2D 4E” 。前面有个双字节前缀 “FF FE” ,这是 Unicode 格式文本文档的编码标识。而我们看到的编码是 “2D 4E” ,而不是如我前面所说的 “4E 2D” ,为什么呢?因为数字是按照低字节在先高字节在后的顺序存储的,所以实际的 Unicode 编码恰恰是 “4E2D”。
具体编码方式,以及各种编码方式之间的细微区别不再介绍,可以参看:http://baike.baidu.com/view/40801.htm?fr=ala0_1
接下来将会介绍中 编码 的处理方式。
分享到:
相关推荐
本文将详细分析这个问题的来源、Java编码转换的过程以及解决策略。 1. 中文问题的来源 早期的计算机系统主要支持单字节的字符编码,如ASCII,无法满足多语言环境的需求。Unicode编码应运而生,它使用双字节表示...
乱码问题主要源自计算机操作系统的字符编码方式以及Java内部使用的UNICODE编码之间的转换过程。在深入解析这一过程后,我们可以透视Java中文问题产生的根本原因,并给出最优化的解决方案。 首先,计算机最初的操作...
### Java中文乱码字符集解决大全 #### 一、中文问题的来源与背景 随着信息技术的发展,计算机系统从最初仅支持单字节字符编码(如ASCII),逐渐演变为支持多种多样的字符集,以满足全球不同语言的需求。这其中最...
在 Java 中,`String` 类型是一种特殊的类型,它用来表示一系列字符的序列。Java 的 `String` 类内部是以 Unicode 编码存储的,这意味着每个字符都对应一个特定的 Unicode 码点。 #### 三、字符编码转换 在实际...
Java 中文乱码问题是一个常见的编程困扰,尤其对于处理中文字符的Java程序而言。这个问题通常源于字符编码的不一致,即不同环节采用的字符编码标准不统一。本文将深入探讨这一问题,并提供相应的解决方案。 首先,...
在英文平台下,采用的默认编码格式是 ISO-8859-1,所以在编译转换后,执行输出时,原先在源文件中书写的中文字符串就变成了乱码。要解决这个问题,在编译 Servlet 类的源程序时,可以用 -encoding 参数指定编码格式...
UTF-16是一种变长的Unicode编码,它可以表示Unicode字符集中所有的字符,每个字符通常由1至4个字节组成,但在Java中,每个`char`类型变量占用两个字节。 在Java中,无论是声明的`char`变量,还是`String`对象,它们...
理解和掌握Java编码转换的过程,以及如何适配各种环境,是解决Java中文乱码问题的关键。在开发和部署Java应用时,应确保编码的一致性,避免因编码不匹配导致的乱码现象,提高程序的可移植性和兼容性。
为了处理不同编码格式的数据,Java提供了一系列的字符流和字节流类,如`InputStreamReader`和`OutputStreamWriter`等,它们可以将字节流转换为字符流,从而实现对各种编码格式的支持。 在实际开发中,理解字符集和...
在Java中,字符乱码通常是由于字符编码不一致导致的。例如,一个以UTF-8编码的文件被误认为是GBK编码来读取,就会出现乱码现象。为了解决这个问题,Java提供了`java.nio.charset.Charset`、`java.io....
综上所述,理解Java编码处理机制以及中文乱码产生的原因,对于解决实际开发中的乱码问题至关重要。开发者应关注源代码的编码设置、文件读写和网络通信中的编码转换,以确保Java程序在各种环境下都能正确处理中文字符...
Java中文乱码问题是编程者在开发Java应用程序时经常遇到的问题,尤其是涉及到中文字符处理时。这些问题产生的根本原因在于Java内部采用UNICODE编码,而不同的操作系统和浏览器可能支持不同的编码格式,如Windows中文...
在IT行业中,字符集编码是基础且至关重要的概念,尤其对于Java开发者来说,理解编码机制是处理各种文本数据的关键。本文将围绕“Java字符集编码简记”这一主题,深入探讨相关知识点,并结合标签“源码”和“工具”,...
- 在Java中,当从URL获取参数时,`HttpServletRequest.getParameter()` 默认使用ISO-8859-1编码,这可能导致中文乱码。为了解决这个问题,我们需要在获取参数后手动将其转换为正确的字符集,如UTF-8。 3. **设置...
当Java程序读取或写入包含中文字符的文件时,需要设置正确的字符编码。例如,使用`FileReader`和`FileWriter`时,可以通过构造函数传入`Charset`对象,如`new FileReader(file, "UTF-8")`。如果使用`BufferedReader...
在JAVA开发中,正确处理字符集编码至关重要,以避免乱码和数据不一致的问题。 一、ISO8859-1与ASCII ISO8859-1是一种单字节编码标准,通常用于西欧语言,其编码范围为0-255。在ISO8859-1中,ASCII字符集是其子集,...
Java 中文乱码问题详解 ...要解决乱码问题,我们需要了解 Java 处理字符的原理,并了解编译和运行时的字符编码转换过程。在编译时,需要指定正确的编码类型;在运行时,需要正确地处理字符编码转换,以避免乱码的出现。