Java中编码以及Unicode总结

合集下载

java的8个基本数据类型

java的8个基本数据类型

Java是一种广泛应用的编程语言,其具有丰富的数据类型,包括8个基本数据类型。

本文将对Java的8个基本数据类型进行介绍,分别是整型、浮点型、字符型和布尔型,每种数据类型的取值范围、存储方式以及使用注意事项都会被逐一解释。

一、整型数据类型在Java中,整型数据类型用于表示整数,共有4种整型数据类型,分别是byte、short、int和long。

它们分别占用不同的存储空间,具体如下:1. byte:占用1字节,取值范围是-128到127。

2. short:占用2字节,取值范围是-xxx到xxx。

3. int:占用4字节,取值范围是-xxx到xxx。

4. long:占用8字节,取值范围是-xxx到xxx。

二、浮点型数据类型浮点型数据类型用于表示带有小数部分的数值,在Java中有两种浮点型数据类型,分别是float和double。

它们分别占用不同的存储空间,具体如下:1. float:占用4字节,有效位数为6-7位。

2. double:占用8字节,有效位数为15位。

三、字符型数据类型在Java中,字符型数据类型用于表示单个字符,只有一种字符型数据类型char,它占用2个字节,取值范围是'\u0000'到'\uffff'。

四、布尔型数据类型布尔型数据类型用于表示逻辑值,只有一种布尔型数据类型boolean,它只占用1位,取值只有true和false两种。

Java的8个基本数据类型分别是byte、short、int、long、float、double、char和boolean。

每种数据类型都有其独特的特点和使用方法,程序员在使用时需要根据实际需求选择合适的数据类型,以充分利用内存空间并确保数据精确性。

需要注意的是,Java还有引用数据类型,如类、接口等,这些数据类型在实际编程中同样具有重要作用,程序员需要全面掌握Java的数据类型,以提高编程效率和质量。

五、整型数据类型的使用注意事项在使用整型数据类型时,需要注意以下几点:1. 越界问题:超出整型数据类型的取值范围会导致溢出,需要谨慎处理。

unicode编码详解,一看就懂

unicode编码详解,一看就懂

unicode编码详解,⼀看就懂⼀、Unicode编码1 UTF-8 -16 -32编码和Unicode编码 Unicode编码是⼀种计算机字符编码标准,其实个⼈认为叫字符集更为准确;⽽我们熟悉的UTF-8 UTF-16 UTF-32是Unicode的具体实现(怎么存储在计算机)。

1)Unicode编码规范制定标准: 把世界上所有能出现的字符,都为其分配⼀个数字来表⽰,⽐如,数字U+7F57被分配给了汉字中的"罗"字。

Unicode编码的标准⾥字符数量⼀直实在新增(包括⼀些稀有字符,当然emoji表情字符也属于unicode编码哈哈),19年3⽉刚发布了Unicode12.0版本,⽐之前的版本新增了⼀些字符,现在在标准中的字符⼀共有137929个,⽽Unicode编码⽬前规划了U+0000⾄U+10FFFF为unicode编码(以世界上字符的数量应该是很久不会考虑扩展的),算⼀下⽬前还剩下976183(1114112-137929)个代码点,这976183个代码点是规划在unicode中的数字,但是还没被分配对应的字符。

2)UTF-8编码: UTF-8可以说是当前互联⽹最常⽤的编码格式了,它基于Unicode字符集进⾏编码设计。

它最⼤的特点是变长字节的编码设计,⼀个字符最长4个字节,最少1个字节,⼤部分的中⽂字符占3个字节。

编码规则如下: 1.⽤⼀个字节表⽰的字符,第⼀位设为 0,后⾯的 7 位对应这个字符的 Unicode 码点。

由于这128个字符的unicode完全对照ASCII码,可以说完全向下兼容ASCII码。

即ASCII编码的⽂件可以⽤UTF-8打开⽽不乱码; 2.⽤⼀个字节以上表⽰的字符,假设是N个字节表⽰这个字符:则该字符第⼀个字节的前N位都为1,第N+1位为0,剩下的N-1个字节的前两位都设为10,剩下没有主动设值的位置则使⽤这个字符的Unicode⼆进制代码点从低位到⾼位填充,不够⽤0补⾜。

java编码

java编码
Java编码基础
基础概念
字符 字符集(character set)
字符的集合 定义码点与字符的映射关系 例:unicode(统一码),gb2312,ascii等
码点(code point) 码元(code unit) 编码(encoding)
定义码元(code unit)与码点的关系 在unicode之前,其实字符集与编码是确定的,就是说码元与码点是一致的,直到出现了unicode编码后,才有了字符集与编码的概念 字符集与编码关系:
单字节符号:字节第一位设为0,后面7位与unicode码相同,与ASCII码相同。 对于N字节符号(N>1):第一个字节前N位设置为1,第N+1位设置为0,后面字节的前
两位一律为10,剩下的没有提及的二进制位,全是这个符号的unicode码。
编码规则:
UTF-8与unicode的转化
以汉字“严”为例(Unicode->UTF-8):
UNICODE码(统一码)
1990年研发,1994年公布。 只是一个字符集(码表),不是一种编码,比如utf8是unicode的一种编码。 规定了符号的二进制代码,却没有规定如何存储。
UTF-8编码(Unicode Transfer Format)
是一种变长编码,使用1-4字节表示一个符号。 是ASCII的超集,兼容ASCII(使用一字节表示)。 编码规则:
String str = "中国人严";
for(int i = 0; i < str.length();i++) { char c = str.charAt(i); sb.append("\\u" + Integer.toHexString(c));

java中越南文适用的编码格式

java中越南文适用的编码格式

一、介绍在编程语言Java中,对于越南文的处理需要使用适当的编码格式。

越南文是东南亚的一种语言,其文字包括越南语中的「E�」、「『�」和「《《�」等标点符号以及拉丁字母。

针对越南文的特殊字符,Java中需要使用适用的编码格式来确保文字的正确显示和处理。

二、UTF-8编码UTF-8是一种针对Unicode的编码格式,它可以表示世界上几乎所有的字符,包括越南文中的特殊字符。

在Java中,使用UTF-8编码可以确保越南文的正确显示和处理。

UTF-8编码格式使用变长字节,一个字符可能占用1至4个字节,因此可以兼容多种语言的字符集。

三、Unicode编码Unicode是一种字符集,它定义了世界上几乎所有的字符,并为每个字符指定了一个唯一的编码。

在Java中,可以使用Unicode编码来表示越南文中的字符。

Unicode编码使用16位或32位来表示一个字符,因此可以准确地表示越南文中的所有特殊字符。

四、Java中的编码处理在Java中,可以使用String类的构造方法或getBytes()方法来指定编码格式。

可以使用String(byte[] bytes, Charset charset)构造方法来将字节数组转换为字符串,并指定使用UTF-8编码。

另外,也可以使用String.getBytes(Charset charset)方法将字符串转换为字节数组,同样可以指定使用UTF-8编码。

五、示例代码下面是一个简单的示例代码,演示了在Java中如何使用UTF-8编码处理越南文:```javaimport java.io.UnsupportedEncodingException;import java.nio.charset.Charset;public class VietnameseEncoding {public static void m本人n(String[] args) {String vietnameseText = "Xin chào"; // 越南语中的“你好”try {byte[] utf8Bytes = vietnameseText.getBytes("UTF-8");String utf8String = new String(utf8Bytes,Charset.forName("UTF-8"));System.out.println("UTF-8编码:" + utf8String);} catch (UnsupportedEncodingException e) {e.printStackTrace();}}}```在这个示例代码中,首先我们定义了一个越南语的字符串vietnameseText。

JAVA中文字符乱码解决详解

JAVA中文字符乱码解决详解

JAVA中⽂字符乱码解决详解⾸先要了解JAVA处理字符的原理。

JAVA使⽤UNICODE来存储字符数据,处理字符时通常有三个步骤:– 按指定的字符编码形式,从源输⼊流中读取字符数据– 以UNICODE编码形式将字符数据存储在内存中– 按指定的字符编码形式,将字符数据编码并写⼊⽬的输出流中。

所以JAVA处理字符时总是经过了两次编码转换,⼀次是从指定编码转换为UNICODE编码,⼀次是从UNICODE编码转换为指定编码。

如果在读⼊时⽤错误的形式解码字符,则内存存储的是错误的UNICODE字符。

⽽从最初⽂件中读出的字符数据,到最终在屏幕终端显⽰这些字符,期间经过了应⽤程序的多次转换。

如果中间某次字符处理,⽤错误的编码⽅式解码了从输⼊流读取的字符数据,或⽤错误的编码⽅式将字符写⼊输出流,则下⼀个字符数据的接收者就会编解码出错,从⽽导致最终显⽰乱码。

这⼀点,是我们分析字符编码问题以及解决问题的指导思想。

好,现在我们开始⼀只只的解决这些乱码怪兽。

⼀、在JAVA⽂件中硬编码中⽂字符,在eclipse中运⾏,控制台输出了乱码。

例如,我们在JAVA⽂件中写⼊以下代码:String text = “⼤家好”;System.out.println(text);如果我们是在eclipse⾥编译运⾏,可能看到的结果是类似这样的乱码:。

那么,这是为什么呢?我们先来看看整个字符的转换过程。

1. 在eclipse窗⼝中输⼊中⽂字符,并保存成UTF-8的JAVA⽂件。

这⾥发⽣了多次字符编码转换。

不过因为我们相信eclipse的正确性,所以我们不⽤分析其中的过程,只需要相信保存下的JAVA⽂件确实是UTF-8格式。

2. 在eclipse中编译运⾏此JAVA⽂件。

这⾥有必要详细分析⼀下编译和运⾏时的字符编码转换。

– 编译:我们⽤javac编译JAVA⽂件时,javac不会智能到猜出你所要编译的⽂件是什么编码类型的,所以它需要指定读取⽂件所⽤的编码类型。

java 常用编码格式

java 常用编码格式

java 常用编码格式
Java 中常用的编码格式有:
1.UTF-8:UTF-8 是 Java 的默认编码格式,也是目前使用最广泛的编码格式之一。

它是一种可变长度的编码方式,支持几乎所有的国家和地区字符。

2.GB2312:GB2312 是中国制定的国家标准编码,用于表示简体中文。

3.GBK:GBK 是 GB2312 的扩展,支持繁体中文和部分其他字符集。

4.ISO-8859-1:ISO-8859-1 是西欧语言的编码标准,支持包括英文在内的多种语言。

5.BIG5:BIG5 是中国台湾地区制定的国家标准编码,用于表示繁体中文。

在 Java 中,可以通过以下方式获取和设置编码格式:
java复制代码
// 获取默认编码格式
String defaultEncoding = System.getProperty("file.encoding");
// 设置编码格式
OutputStream outputStream = new FileOutputStream("file.txt");
outputStream.write(bytes, 0, bytes.length,
Charset.forName("UTF-8"));
其中,System.getProperty("file.encoding")可以获取 JVM 启动时设置的默认编码格式;Charset.forName("UTF-8")可以指定特定的编码格式,此处为 UTF-8。

Unicode,GBK,GB2312,UTF-8概念基础(转载)

Unicode,GBK,GB2312,UTF-8概念基础(转载)

Unicode,GBK,GB2312,UTF-8概念基础(转载)第⼀篇:JAVA字符编码系列⼀:Unicode,GBK,GB2312,UTF-8概念基础本部分采⽤重⽤,转载⼀篇⽂章来完成这部分的⽬标。

来源:holen'blog 对字符编码与Unicode,ISO 10646,UCS,UTF8,UTF16,GBK,GB2312的理解地址:/holen/archive/2004/11/30/188182.aspxUnicode:制定的编码机制, 要将全世界常⽤⽂字都函括进去.在1.0中是16位编码, 由U+0000到U+FFFF. 每个2byte码对应⼀个字符; 在2.0开始抛弃了16位限制, 原来的16位作为基本位平⾯, 另外增加了16个位平⾯, 相当于20位编码, 编码范围0到0x10FFFF.UCS:ISO制定的ISO10646标准所定义的 Universal Character Set, 采⽤4byte编码.Unicode与UCS的关系:ISO与是两个不同的组织, 因此最初制定了不同的标准; 但⾃从unicode2.0开始, unicode采⽤了与ISO 10646-1相同的字库和字码, ISO也承诺ISO10646将不会给超出0x10FFFF的UCS-4编码赋值, 使得两者保持⼀致.UCS的编码⽅式:UCS-2, 与unicode的2byte编码基本⼀样.UCS-4, 4byte编码, ⽬前是在UCS-2前加上2个全零的byte.UTF: Unicode/UCS Transformation FormatUTF-8, 8bit编码, ASCII不作变换, 其他字符做变长编码, 每个字符1-3 byte. 通常作为外码. 有以下优点:* 与CPU字节顺序⽆关, 可以在不同平台之间交流* 容错能⼒⾼, 任何⼀个字节损坏后, 最多只会导致⼀个编码码位损失, 不会链锁错误(如GB码错⼀个字节就会整⾏乱码)UTF-16, 16bit编码, 是变长码, ⼤致相当于20位编码, 值在0到0x10FFFF之间, 基本上就是unicode编码的实现. 它是变长码, 与CPU字序有关, 但因为最省空间, 常作为⽹络传输的外码.UTF-16是unicode的preferred encoding.UTF-32, 仅使⽤了unicode范围(0到0x10FFFF)的32位编码, 相当于UCS-4的⼦集.UTF与unicode的关系:Unicode是⼀个字符集, 可以看作为内码.⽽UTF是⼀种编码⽅式, 它的出现是因为unicode不适宜在某些场合直接传输和处理. UTF-16直接就是unicode编码, 没有变换, 但它包含了0x00在编码内, 头256字节码的第⼀个byte都是0x00, 在操作系统(C语⾔)中有特殊意义, 会引起问题. 采⽤UTF-8编码对unicode的直接编码作些变换可以避免这问题, 并带来⼀些优点.中国国标编码:GB 13000: 完全等同于ISO 10646-1/Unicode 2.1, 今后也将随ISO 10646/Unicode的标准更改⽽同步更改.GBK: 对GB2312的扩充, 以容纳GB2312字符集范围以外的Unicode 2.1的统⼀汉字部分, 并且增加了部分unicode中没有的字符.GB 18030-2000: 基于GB 13000, 作为Unicode 3.0的GBK扩展版本, 覆盖了所有unicode编码, 地位等同于UTF-8, UTF-16, 是⼀种unicode编码形式. 变长编码, ⽤单字节/双字节/4字节对字符编码. GB18030向下兼容GB2312/GBK.GB 18030是中国所有⾮⼿持/嵌⼊式计算机系统的强制实施标准.-------------------------------什么是 UCS 和 ISO 10646?国际标准 ISO 10646 定义了通⽤字符集 (Universal Character Set, UCS). UCS 是所有其他字符集标准的⼀个超集. 它保证与其他字符集是双向兼容的.就是说, 如果你将任何⽂本字符串翻译到 UCS格式, 然后再翻译回原编码, 你不会丢失任何信息.UCS 包含了⽤于表达所有已知语⾔的字符. 不仅包括拉丁语,希腊语, 斯拉夫语,希伯来语,阿拉伯语,亚美尼亚语和乔治亚语的描述, 还包括中⽂, ⽇⽂和韩⽂这样的象形⽂字, 以及平假名, ⽚假名, 孟加拉语, 旁遮普语果鲁穆奇字符(Gurmukhi), 泰⽶尔语, 印.埃纳德语(Kannada), Malayalam, 泰国语, ⽼挝语, 汉语拼⾳(Bopomofo), Hangul, Devangari, Gujarati, Oriya, Telugu 以及其他数也数不清的语. 对于还没有加⼊的语⾔, 由于正在研究怎样在计算机中最好地编码它们, 因⽽最终它们都将被加⼊. 这些语⾔包括 Tibetian, ⾼棉语, Runic(古代北欧⽂字), 埃塞俄⽐亚语, 其他象形⽂字, 以及各种各样的印-欧语系的语⾔, 还包括挑选出来的艺术语⾔⽐如 Tengwar, Cirth 和克林贡语(Klingon). UCS 还包括⼤量的图形的, 印刷⽤的, 数学⽤的和科学⽤的符号, 包括所有由 TeX, Postscript, MS-DOS,MS-Windows, Macintosh, OCR 字体, 以及许多其他字处理和出版系统提供的字符.ISO 10646 定义了⼀个 31 位的字符集. 然⽽, 在这巨⼤的编码空间中, 迄今为⽌只分配了前 65534 个码位 (0x0000 到 0xFFFD). 这个 UCS 的 16位⼦集称为基本多语⾔⾯ (Basic Multilingual Plane, BMP). 将被编码在 16 位 BMP 以外的字符都属于⾮常特殊的字符(⽐如象形⽂字), 且只有专家在历史和科学领域⾥才会⽤到它们. 按当前的计划, 将来也许再也不会有字符被分配到从 0x000000 到 0x10FFFF 这个覆盖了超过 100 万个潜在的未来字符的21 位的编码空间以外去了. ISO 10646-1 标准第⼀次发表于 1993 年, 定义了字符集与 BMP 中内容的架构. 定义 BMP 以外的字符编码的第⼆部分 ISO 10646-2 正在准备中, 但也许要过好⼏年才能完成. 新的字符仍源源不断地加⼊到 BMP 中, 但已经存在的字符是稳定的且不会再改变了.UCS 不仅给每个字符分配⼀个代码, ⽽且赋予了⼀个正式的名字. 表⽰⼀个 UCS 或 Unicode 值的⼗六进制数, 通常在前⾯加上 "U+", 就象 U+0041 代表字符"拉丁⼤写字母A". UCS 字符 U+0000 到 U+007F 与 US-ASCII(ISO 646) 是⼀致的, U+0000 到 U+00FF 与 ISO 8859-1(Latin-1) 也是⼀致的. 从U+E000 到 U+F8FF, 已经 BMP 以外的⼤范围的编码是为私⽤保留的.什么是组合字符?UCS⾥有些编码点分配给了组合字符.它们类似于打字机上的⽆间隔重⾳键. 单个的组合字符不是⼀个完整的字符. 它是⼀个类似于重⾳符或其他指⽰标记, 加在前⼀个字符后⾯. 因⽽, 重⾳符可以加在任何字符后⾯. 那些最重要的被加重的字符, 就象普通语⾔的正字法(orthographies of common languages)⾥⽤到的那种, 在 UCS ⾥都有⾃⼰的位置, 以确保同⽼的字符集的向后兼容性. 既有⾃⼰的编码位置, ⼜可以表⽰为⼀个普通字符跟随⼀个组合字符的被加重字符, 被称为预作字符(precomposed characters). UCS ⾥的预作字符是为了同没有预作字符的旧编码, ⽐如 ISO 8859, 保持向后兼容性⽽设的. 组合字符机制允许在任何字符后加上重⾳符或其他指⽰标记, 这在科学符号中特别有⽤, ⽐如数学⽅程式和国际⾳标字母, 可能会需要在⼀个基本字符后组合上⼀个或多个指⽰标记.组合字符跟随着被修饰的字符. ⽐如, 德语中的元⾳变⾳字符 ("拉丁⼤写字母A 加上分⾳符"), 既可以表⽰为 UCS 码 U+00C4 的预作字符, 也可以表⽰成⼀个普通 "拉丁⼤写字母A" 跟着⼀个"组合分⾳符":U+0041 U+0308 这样的组合. 当需要堆叠多个重⾳符, 或在⼀个基本字符的上⾯和下⾯都要加上组合标记时, 可以使⽤多个组合字符. ⽐如在泰国⽂中, ⼀个基本字符最多可加上两个组合字符.什么是 UCS 实现级别?不是所有的系统都需要⽀持象组合字符这样的 UCS ⾥所有的先进机制. 因此 ISO 10646 指定了下列三种实现级别:级别1不⽀持组合字符和 Hangul Jamo 字符 (⼀种特别的, 更加复杂的韩国⽂的编码, 使⽤两个或三个⼦字符来编码⼀个韩⽂⾳节)级别2类似于级别1, 但在某些⽂字中, 允许⼀列固定的组合字符 (例如, 希伯来⽂, 阿拉伯⽂, Devangari, 孟加拉语, 果鲁穆奇语, Gujarati, Oriya, 泰⽶尔语, Telugo, 印.埃纳德语, Malayalam, 泰国语和⽼挝语). 如果没有这最起码的⼏个组合字符, UCS 就不能完整地表达这些语⾔.级别3⽀持所有的 UCS 字符, 例如数学家可以在任意⼀个字符上加上⼀个 tilde(颚化符号,西班⽛语字母上⾯的~)或⼀个箭头(或两者都加).什么是 Unicode?历史上, 有两个独⽴的, 创⽴单⼀字符集的尝试. ⼀个是国际标准化组织(ISO)的 ISO 10646 项⽬, 另⼀个是由(⼀开始⼤多是美国的)多语⾔软件制造商组成的协会组织的 Unicode 项⽬. 幸运的是, 1991年前后, 两个项⽬的参与者都认识到, 世界不需要两个不同的单⼀字符集. 它们合并双⽅的⼯作成果, 并为创⽴⼀个单⼀编码表⽽协同⼯作. 两个项⽬仍都存在并独⽴地公布各⾃的标准, 但 Unicode 协会和 ISO/IEC JTC1/SC2 都同意保持 Unicode 和 ISO 10646 标准的码表兼容, 并紧密地共同调整任何未来的扩展.那么 Unicode 和 ISO 10646 不同在什么地⽅?Unicode 协会公布的 Unicode 标准严密地包含了 ISO 10646-1 实现级别3的基本多语⾔⾯. 在两个标准⾥所有的字符都在相同的位置并且有相同的名字.Unicode 标准额外定义了许多与字符有关的语义符号学, ⼀般⽽⾔是对于实现⾼质量的印刷出版系统的更好的参考. Unicode 详细说明了绘制某些语⾔(⽐如阿拉伯语)表达形式的算法, 处理双向⽂字(⽐如拉丁与希伯来⽂混合⽂字)的算法和排序与字符串⽐较所需的算法, 以及其他许多东西.另⼀⽅⾯, ISO 10646 标准, 就象⼴为⼈知的 ISO 8859 标准⼀样, 只不过是⼀个简单的字符集表. 它指定了⼀些与标准有关的术语, 定义了⼀些编码的别名, 并包括了规范说明, 指定了怎样使⽤ UCS 连接其他 ISO 标准的实现, ⽐如 ISO 6429 和 ISO 2022. 还有⼀些与 ISO 紧密相关的, ⽐如 ISO 14651 是关于 UCS 字符串排序的.考虑到 Unicode 标准有⼀个易记的名字, 且在任何好的书店⾥的 Addison-Wesley ⾥有, 只花费 ISO 版本的⼀⼩部分, 且包括更多的辅助信息, 因⽽它成为使⽤⼴泛得多的参考也就不⾜为奇了. 然⽽, ⼀般认为, ⽤于打印 ISO 10646-1 标准的字体在某些⽅⾯的质量要⾼于⽤于打印 Unicode 2.0的. 专业字体设计者总是被建议说要两个标准都实现, 但⼀些提供的样例字形有显著的区别. ISO 10646-1 标准同样使⽤四种不同的风格变体来显⽰表意⽂字如中⽂, ⽇⽂和韩⽂ (CJK), ⽽ Unicode 2.0 的表⾥只有中⽂的变体. 这导致了普遍的认为 Unicode 对⽇本⽤户来说是不可接收的传说, 尽管是错误的.什么是 UTF-8?⾸先 UCS 和 Unicode 只是分配整数给字符的编码表. 现在存在好⼏种将⼀串字符表⽰为⼀串字节的⽅法. 最显⽽易见的两种⽅法是将 Unicode ⽂本存储为 2 个或 4 个字节序列的串. 这两种⽅法的正式名称分别为 UCS-2 和 UCS-4. 除⾮另外指定, 否则⼤多数的字节都是这样的(Bigendian convention). 将⼀个 ASCII 或 Latin-1 的⽂件转换成 UCS-2 只需简单地在每个 ASCII 字节前插⼊ 0x00. 如果要转换成 UCS-4, 则必须在每个 ASCII 字节前插⼊三个 0x00.在 Unix 下使⽤ UCS-2 (或 UCS-4) 会导致⾮常严重的问题. ⽤这些编码的字符串会包含⼀些特殊的字符, ⽐如 '/0' 或 '/', 它们在⽂件名和其他 C 库函数参数⾥都有特别的含义. 另外, ⼤多数使⽤ ASCII ⽂件的 UNIX 下的⼯具, 如果不进⾏重⼤修改是⽆法读取 16 位的字符的. 基于这些原因, 在⽂件名, ⽂本⽂件, 环境变量等地⽅, UCS-2 不适合作为 Unicode 的外部编码.在 ISO 10646-1 Annex R 和 RFC 2279 ⾥定义的 UTF-8 编码没有这些问题. 它是在 Unix 风格的操作系统下使⽤ Unicode 的明显的⽅法.UTF-8 有⼀下特性:UCS 字符 U+0000 到 U+007F (ASCII) 被编码为字节 0x00 到 0x7F (ASCII 兼容). 这意味着只包含 7 位 ASCII 字符的⽂件在 ASCII 和 UTF-8 两种编码⽅式下是⼀样的.所有 >U+007F 的 UCS 字符被编码为⼀个多个字节的串, 每个字节都有标记位集. 因此, ASCII 字节 (0x00-0x7F) 不可能作为任何其他字符的⼀部分.表⽰⾮ ASCII 字符的多字节串的第⼀个字节总是在 0xC0 到 0xFD 的范围⾥, 并指出这个字符包含多少个字节. 多字节串的其余字节都在 0x80 到0xBF 范围⾥. 这使得重新同步⾮常容易, 并使编码⽆国界, 且很少受丢失字节的影响.可以编⼊所有可能的 231个 UCS 代码UTF-8 编码字符理论上可以最多到 6 个字节长, 然⽽ 16 位 BMP 字符最多只⽤到 3 字节长.Bigendian UCS-4 字节串的排列顺序是预定的.字节 0xFE 和 0xFF 在 UTF-8 编码中从未⽤到.下列字节串⽤来表⽰⼀个字符. ⽤到哪个串取决于该字符在 Unicode 中的序号.U-00000000 - U-0000007F: 0xxxxxxxU-00000080 - U-000007FF: 110xxxxx 10xxxxxxU-00000800 - U-0000FFFF: 1110xxxx 10xxxxxx 10xxxxxxU-00010000 - U-001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxxU-00200000 - U-03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxU-04000000 - U-7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxxxxx 的位置由字符编码数的⼆进制表⽰的位填⼊. 越靠右的 x 具有越少的特殊意义. 只⽤最短的那个⾜够表达⼀个字符编码数的多字节串. 注意在多字节串中, 第⼀个字节的开头"1"的数⽬就是整个串中字节的数⽬.例如: Unicode 字符 U+00A9 = 1010 1001 (版权符号) 在 UTF-8 ⾥的编码为:11000010 10101001 = 0xC2 0xA9⽽字符 U+2260 = 0010 0010 0110 0000 (不等于) 编码为:11100010 10001001 10100000 = 0xE2 0x89 0xA0这种编码的官⽅名字拼写为 UTF-8, 其中 UTF 代表 UCS Transformation Format. 请勿在任何⽂档中⽤其他名字 (⽐如 utf8 或 UTF_8) 来表⽰ UTF-8,当然除⾮你指的是⼀个变量名⽽不是这种编码本⾝.什么编程语⾔⽀持 Unicode?在⼤约 1993 年之后开发的⼤多数现代编程语⾔都有⼀个特别的数据类型, 叫做 Unicode/ISO 10646-1 字符. 在 Ada95 中叫 Wide_Character, 在 Java 中叫 char.ISO C 也详细说明了处理多字节编码和宽字符 (wide characters) 的机制, 1994 年 9 ⽉ Amendment 1 to ISO C 发表时⼜加⼊了更多. 这些机制主要是为各类东亚编码⽽设计的, 它们⽐处理 UCS 所需的要健壮得多. UTF-8 是 ISO C 标准调⽤多字节字符串的编码的⼀个例⼦, wchar_t 类型可以⽤来存放Unicode 字符.---------------------作者:qinysong来源:CSDN原⽂:https:///qinysong/article/details/1179480版权声明:本⽂为博主原创⽂章,转载请附上博⽂链接!。

java中文转换Unicode编码

java中文转换Unicode编码

Java中文Unicode中文转换转换背景:把中文转换成Unicode编码再直接输出,程序解析XML,properties,以及JS 打印提示信息后再把Unicode编码转回中文就没有问题了。

提供两种方法把中文转换成Unicode编码:第一种办法:Eclipse中JS转换法1. web项目中随便新建一个*.js文件,将文件的编码属性设置为utf8 (右击文件从弹出菜单中选择“properties”在弹出的属性对话框中设置“Text file encoding”选项)2. 打开新建的*.js文件,输入: “要转换的汉字”.3. 按下Ctrl+Shift+F 或右键点击文件内容从弹出菜单中选择“FormatDocument”选型,效果出来了。

总结:必须将汉字放到””中间,否则不转换.^_^第二种办法:JAVA程序实现法public class CharacterSetToolkit {/**Creates a new instance of CharacterSetToolkit*/public CharacterSetToolkit() {}private static final char[] hexDigit = {'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};private static char toHex(int nibble) {return hexDigit[(nibble & 0xF)];}/***将字符串编码成Unicode。

*@param theString待转换成Unicode编码的字符串。

Java中的字节,字符与编码,解码

Java中的字节,字符与编码,解码

Java中的字节,字符与编码,解码ASCII编码ASCII码主要是为了表⽰英⽂字符⽽设计的,ASCII码⼀共规定了128个字符的编码(0x00-0x7F),只占⽤了⼀个字节的后⾯7位,最前⾯的1位统⼀规定为0。

ISO-8859-1编码为了扩展覆盖其他语⾔字符,ISO组织在ASCII码基础上⼜制定了⼀系列标准⽤来扩展ASCII编码,它们是ISO-8859-1~ISO-8859-15,其中ISO-8859-1应⽤得最⼴泛。

ISO-8859-1仍然是单字节编码,它总共能表⽰256个字符。

ISO-8859-1向下兼容ASCII,其编码范围是0x00-0xFF,0x00-0x7F之间完全和ASCII⼀致。

因为ISO-8859-1编码范围使⽤了单字节内的所有空间,在⽀持ISO-8859-1的系统中传输和存储其他任何编码的字节流都不会被抛弃。

换⾔之,把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。

Unicode,UCS2和UCS4Unicode是为整合全世界的所有语⾔⽂字⽽诞⽣的。

任何⽂字在Unicode中都对应⼀个值,这个值称为代码点(Code Point),常写成 U+XXXX的格式。

⽽⽂字和代码点之间的对应关系就有UCS-2和UCS-4。

UCS-2:⽤两个字节来表⽰代码点,其取值范围为 U+0000~U+FFFF。

UCS-4:为了能表⽰更多的⽂字,⼈们⼜提出了UCS-4,即⽤四个字节表⽰代码点。

它的范围为 U+00000000~U+7FFFFFFF,其中U+00000000~U+0000FFFF和UCS-2是⼀样的。

要注意,UCS-2和UCS-4只规定了代码点和⽂字之间的对应关系,并没有规定代码点在计算机中如何存储。

规定存储⽅式的称为UTF(Unicode Transformation Format),其中应⽤较多的就是UTF-8和UTF-16了。

UTF-8,UTF-16,UTF-32UTF-32是对应于UCS-4,不常⽤。

Javaunicode中文编码转换和反转

Javaunicode中文编码转换和反转

Javaunicode中⽂编码转换和反转参考⽹址在java的很多配置⽂件中,尤其是国际化资源中经常遇到类似\uf432这样的unicode编码,搜集了下该编码相关的资料,⼤致处理⽅法有如下:1、Unicode转汉字字符串。

这个过程最简单的⽅式就是直接获取。

⽐如String cnStr = "\ufeff\u4e2d\u56fd\u4eba";System.out.println(cnStr); 即可获取对应的汉字字符 “中国⼈”;但是呢,每次从输出读的话也未免过于不⽅便了,我们使⽤⽅法来做转换,直接获取。

参考如下public static String unicodeToString(String str) {Pattern pattern = pile("(\\\\u(\\p{XDigit}{4}))");Matcher matcher = pattern.matcher(str);char ch;while (matcher.find()) {ch = (char) Integer.parseInt(matcher.group(2), 16);str = str.replace(matcher.group(1), ch + "");}return str;}2、获取字符串的unicode编码,这个我们可以通过直接获取字符串的unicode⼆进制,然后将其byte转换成对应的16进制表⽰即可,函数⽰例如下static String getUnicode(String s) {try {StringBuffer out = new StringBuffer("");byte[] bytes = s.getBytes("unicode");for (int i = 0; i < bytes.length - 1; i += 2) {out.append("\\u");String str = Integer.toHexString(bytes[i + 1] & 0xff);for (int j = str.length(); j < 2; j++) {out.append("0");}String str1 = Integer.toHexString(bytes[i] & 0xff);out.append(str1);out.append(str);}return out.toString();} catch (UnsupportedEncodingException e) {e.printStackTrace();return null;}}通过上⾯的⽅式便可完整的使⽤unicode编码了,⼤家有其他⽅式的转换也可以告诉我下,互相学习。

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

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

【适用范围】适用EOS所有版本,操作系统不限,数据库不限【问题描述和定位】JAVA字符编码:Unicode,ISO-8859-1,GBK,UTF-8编码及相互转换【解决方案和步骤】1、函数介绍在Java中,字符串用统一的Unicode编码,每个字符占用两个字节,与编码有关的两个主要函数为:1)将字符串用指定的编码集合解析成字节数组,完成Unicode-〉charsetName转换public byte[] getBytes(String charsetName) throws UnsupportedEncodingException2)将字节数组以指定的编码集合构造成字符串,完成charsetName-〉Unicode转换public String(byte[] bytes, String charsetName) throws UnsupportedEncodingException 2、Unicode与各编码之间的直接转换下面以对中文字符串"a中文"的编码转换为例,来了解各种编码之间的转换1)Unicode和GBK测试结果如下,每个汉字转换为两个字节,且是可逆的,即通过字节可以转换回字符串String-GBK〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xD6 0xD0 0xCE 0xC4 ByteArray-GBK〉String:0x61 0xD6 0xD0 0xCE 0xC4-〉\u0061\u4E2D\u6587(a中文)2)Unicode和UTF-8测试结果如下,每个汉字转换为三个字节,且是可逆的,即通过字节可以转换回字符串String-UTF-8〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0xE4 0xB8 0xAD 0xE 6%0x96 0x87ByteArray-UTF-8〉String:0x61 0xE4 0xB8 0xAD 0xE6%0x96 0x87-〉\u0061\u4E2D\u6 587(a中文)3)Unicode和ISO-8859-1测试结果如下,当存在汉字时转换失败,非可逆,即通过字节不能再转换回字符串String-ISO-8859-1〉ByteArray:\u0061\u4E2D\u6587(a中文)-〉0x61 0x3F 0x3F ByteArray-ISO-8859-1〉String:0x61 0x3F 0x3F-〉\u0061\u003F\u003F(a??)3、Unicode与各编码之间的交叉转换在上面直接转换中,由字符串(Unicode)生成的字节数组,在构造回字符串时,使用的是正确的编码集合,如果使用的不是正确的编码集合会怎样呢?会正确构造吗?如果不能正确构造能有办法恢复吗?会信息丢失吗?下面我们就来看看这种情况,这部分可以说明在某些情况下虽然我们最终正确显示了结果,但其间仍然进行了不正确的转换。

如何处理代码中的 Unicode 编码问题

如何处理代码中的 Unicode 编码问题

如何处理代码中的 Unicode 编码问题在编程中,处理Unicode编码问题是一个非常重要的技能。

Unicode编码是一种用来表示世界上所有语言字符的标准编码方式,它可以避免在不同的编程环境中出现乱码问题。

本文将介绍如何处理代码中的Unicode编码问题,包括Unicode编码的基本知识、在不同编程语言中处理Unicode编码的方法,以及常见的Unicode编码问题及解决方法。

一、Unicode编码的基本知识Unicode编码是一种全球通用的字符编码标准,它可以表示世界上所有的语言字符,包括ASCII字符以及各种语言的特殊字符。

Unicode 编码采用多字节编码方式,每个字符对应一个或多个字节,这样就可以表示更多的字符,避免了以前使用的ASCII编码的限制。

在Unicode编码中,不同的字符对应不同的编码值,这些编码值可以直接用来表示字符,而不需要像ASCII编码一样限制在127个字符范围内。

Unicode编码采用16位或32位的编码方式,可以表示2^16或2^32个字符,这样就可以满足不同语言字符的表示需求。

二、在不同编程语言中处理Unicode编码的方法1. Python中处理Unicode编码Python是一种非常流行的编程语言,它天生支持Unicode编码,在Python中处理Unicode编码非常简单。

在Python 2.x版本中,字符串默认使用ASCII编码,需要在字符串前加上u前缀表示Unicode 编码;而在Python 3.x版本中,默认使用Unicode编码,不需要加前缀表示。

在Python中,可以使用encode()和decode()方法来进行Unicode 编码和解码操作,也可以使用unicode和str类型来表示Unicode字符串和字节串。

在处理文件读写时,可以使用codecs模块来设置文件的编码格式,这样就可以避免文件读写时出现的Unicode编码问题。

2. Java中处理Unicode编码Java是一种非常流行的编程语言,它也天生支持Unicode编码。

浅谈Java中Unicode的编码和实现

浅谈Java中Unicode的编码和实现

浅谈Java中Unicode的编码和实现Unicode的编码和实现⼤概来说,Unicode编码系统可分为编码⽅式和实现⽅式两个层次。

编码⽅式字符是抽象的最⼩⽂本单位。

它没有固定的形状(可能是⼀个字形),⽽且没有值。

“A”是⼀个字符,“€”也是⼀个字符。

字符集是字符的集合。

编码字符集是⼀个字符集,它为每⼀个字符分配⼀个唯⼀数字。

Unicode 最初设计是作为⼀种固定宽度的 16 位字符编码。

也就是每个字符占⽤2个字节。

这样理论上⼀共最多可以表⽰216(即65536)个字符。

上述16位统⼀码字符构成基本多⽂种平⾯。

基本多⽂种平⾯的字符的编码为U+hhhh,其中每个h代表⼀个⼗六进制数字。

很明显,16 位编码的所有 65,536 个字符并不能完全表⽰全世界所有正在使⽤或曾经使⽤的字符。

于是,Unicode 标准已扩展到包含多达 1,112,064 个字符。

那些超出原来的 16 位限制的字符被称作增补字符。

Unicode 标准 2.0 版是第⼀个包含启⽤增补字符设计的版本,但是,直到 3.1 版才收⼊第⼀批增补字符集。

Unicode字符平⾯映射⽬前的Unicode字元分为17组编排,每组称为平⾯(Plane),⽽每平⾯拥有65536(即216)个代码点。

然⽽⽬前只⽤了少数平⾯。

平⾯始末字元值中⽂名称英⽂名称0号平⾯U+0000 -U+FFFF基本多⽂种平⾯Basic Multilingual Plane,简称BMP1号平⾯U+10000 -U+1FFFF多⽂种补充平⾯Supplementary Multilingual Plane,简称SMP2号平⾯U+20000 -U+2FFFF表意⽂字补充平⾯Supplementary Ideographic Plane,简称SIP3号平⾯U+30000 -U+3FFFF表意⽂字第三平⾯(未正式使⽤)Tertiary Ideographic Plane,简称TIP4号平⾯⾄13号平⾯U+40000 -U+DFFFF(尚未使⽤)14号平⾯U+E0000 -U+EFFFF特别⽤途补充平⾯Supplementary Special-purposePlane,简称SSP15号平⾯U+F0000 -U+FFFFF保留作为私⼈使⽤区(A区)Private Use Area-A,简称PUA-A16号平⾯U+100000 -U+10FFFF保留作为私⼈使⽤区(B区)Private Use Area-B,简称PUA-B增补字符是代码点在 U+10000 ⾄ U+10FFFF 范围之间的字符(上述表格中1号平⾯~16号平⾯之间的),也就是那些使⽤原始的 Unicode 的 16 位设计⽆法表⽰的字符。

java常用编码格式

java常用编码格式

java常用编码格式
在Java中,常用的编码格式有以下几种:
1. UTF-8:它是一种可变长度的Unicode字符编码,它可以使用1到4个字节表示一个字符,是最常用的编码格式之一。

它支持全球范围内的大部分字符集,包括中文、日文、韩文等。

2. ISO-8859-1:它是Latin-1字符集的编码方式,它支持欧洲大部分语言的字符。

它是一个单字节编码,每个字符占用一个字节。

但是它并不支持中文等非拉丁字符。

3. GBK/GB2312:它是中文字符集的编码方式,它支持简体中文字符集。

GBK是GB2312的扩展,支持更多的字符。

它是一个双字节编码,每个中文字符占两个字节,英文字符占用一个字节。

4. UTF-16:它是Unicode字符集的编码方式,它支持大部分字符集,包括中文、日文、韩文等。

UTF-16是一个固定长度的编码方式,每个字符占用2个字节。

这些编码格式可以通过Java的字符串类型来表示和处理。

在Java中,字符串类型使用的是UTF-16编码格式,它是Java默认的编码方式。

如果需要在Java中处理其他编码格式的字符串,可以使用相关的编码、解码函数来转换。

例如,可以使用`getBytes()`方法将字符串转换为指定的编码格式字节数组,使用`new String()`方法将字节数组按照指定的编码格式转换为字符串。

java 常用编码格式

java 常用编码格式

java 常用编码格式摘要:1.Java 编码简介2.常用编码格式a.UTF-8b.GBKc.UTF-16d.UTF-32正文:【Java 编码简介】Java 是一种广泛使用的编程语言,它支持多种编码格式。

编码是将字符从计算机内部表示形式转换为字节序列的过程,以便在计算机之间进行传输和存储。

在Java 中,编码格式用于处理字符串和字节数组。

正确选择编码格式对于确保数据在传输和存储过程中的正确表示至关重要。

【常用编码格式】Java 中常用的编码格式包括UTF-8、GBK、UTF-16 和UTF-32。

下面分别介绍这些编码格式的特点和用法。

【UTF-8】UTF-8(Unicode Transformation Format-8)是一种可变长度的Unicode 编码格式,它可以表示任何Unicode 字符。

UTF-8 编码使用1 到4 个字节来表示字符,其中ASCII 字符使用单个字节表示,而非ASCII 字符使用多个字节表示。

由于UTF-8 可以表示Unicode 字符集中的所有字符,并且具有向后兼容性,所以已经成为了Java 中默认的编码格式。

【GBK】GBK(Guo Biao Kan)是一种双字节的编码格式,它可以表示简体中文中的所有汉字。

GBK 编码使用2 个字节来表示字符,可以表示65536 个不同的字符。

由于GBK 可以表示简体中文中的所有汉字,所以在我国一些特定的场景下仍然被广泛使用。

【UTF-16】UTF-16 是一种可变长度的Unicode 编码格式,它可以表示任何Unicode 字符。

UTF-16 编码使用2 个字节来表示字符,其中ASCII 字符使用单个字节表示,而非ASCII 字符使用多个字节表示。

由于UTF-16 编码的字符集与UTF-8 相同,但占用的空间较大,所以在存储和传输数据时,UTF-8 编码格式更受欢迎。

【UTF-32】UTF-32 是一种可变长度的Unicode 编码格式,它可以表示任何Unicode 字符。

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

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

/xiaohulunb/article/details/39588005开始计算机只在美国用。

八位的字节一共可以组合出256(2的8次方)种不同的状态。

他们把其中的编号从0开始的32种状态分别规定了特殊的用途,一但终端、打印机遇上约定好的这些字节被传过来时,就要做一些约定的动作。

遇上0×10, 终端就换行,遇上0×07, 终端就向人们嘟嘟叫,例好遇上0x1b, 打印机就打印反白的字,或者终端就用彩色显示字母。

他们看到这样很好,于是就把这些0×20以下的字节状态称为”控制码”。

他们又把所有的空格、标点符号、数字、大小写字母分别用连续的字节状态表示,一直编到了第127号,这样计算机就可以用不同字节来存储英语的文字了。

大家看到这样,都感觉很好,于是大家都把这个方案叫做ANSI 的”Ascii”编码(American Standard Code for Information Interchange,美国信息互换标准代码)。

当时世界上所有的计算机都用同样的ASCII方案来保存英文文字。

后来,就像建造巴比伦塔一样,世界各地的都开始使用计算机,但是很多国家用的不是英文,他们的字母里有许多是ASCII里没有的,为了可以在计算机保存他们的文字,他们决定采用127号之后的空位来表示这些新的字母、符号,还加入了很多画表格时需要用下到的横线、竖线、交叉等形状,一直把序号编到了最后一个状态255。

从128 到255这一页的字符集被称”扩展字符集“。

从此之后,贪婪的人类再没有新的状态可以用了,美帝国主义可能没有想到还有第三世界国家的人们也希望可以用到计算机吧!等中国人们得到计算机时,已经没有可以利用的字节状态来表示汉字,况且有6000多个常用汉字需要保存呢。

但是这难不倒智慧的中国人民,我们不客气地把那些127号之后的奇异符号们直接取消掉, 规定:一个小于127的字符的意义与原来相同,但两个大于127的字符连在一起时,就表示一个汉字,前面的一个字节(他称之为高字节)从0xA1用到0xF7,后面一个字节(低字节)从0xA1到0xFE,这样我们就可以组合出大约7000多个简体汉字了。

java 常用编码格式

java 常用编码格式

java 常用编码格式摘要:一、Java编码格式简介1.Java支持的编码格式2.编码格式的重要性二、常用的Java编码格式1.UTF-82.UTF-163.UTF-16BE4.UTF-16LE5.ISO-8859-1三、编码格式转换1.编码转换2.解码转换四、编码格式设置1.设置编码格式的方法2.编码格式设置的注意事项五、总结正文:Java编码格式是Java程序设计中一个十分重要的环节,它涉及到Java程序在开发、编译、运行等各个环节中字符编码的处理。

在Java中,常用的编码格式主要有UTF-8、UTF-16、UTF-16BE、UTF-16LE和ISO-8859-1等。

UTF-8是一种广泛使用的编码格式,其最大的优点是兼容性好,不仅可以表示Unicode字符集中的所有字符,还可以表示ASCII字符集中的所有字符。

UTF-16是一种16位编码格式,可以表示Unicode字符集中的所有字符,但由于其对于ASCII字符集的编码效率较低,所以使用较少。

UTF-16BE和UTF-16LE是UTF-16的两种字节序形式,分别表示大端和小端字节序,主要应用于特定的场景。

ISO-8859-1是一种8位编码格式,主要应用于欧洲语言的表示。

在Java程序设计中,编码格式的转换是经常需要进行的操作。

编码转换是将字符串从一种编码格式转换为另一种编码格式,解码转换则是将字节数组或字符流从一种编码格式转换为另一种编码格式。

Java提供了许多编码转换的方法,如String类的getBytes()和String(byte[] bytes, Charset charset)方法,以及ByteBuffer类的put()和get()方法等。

在Java程序设计中,编码格式的设置也是十分重要的。

编码格式设置主要包括设置字符编码和字符集。

设置字符编码的目的是为了确保程序能够正确处理不同编码格式的字符串,设置字符集的目的是为了确保程序能够正确处理不同语言环境中的字符串。

Java中编码以及Unicode总结

Java中编码以及Unicode总结

Java中编码以及Unicode总结1.基本概念●bit 位只能是0或者1●byte 字节一个字节是8位,1 byte=8 bits 计算机表示的基本单位●KB,MB,GB,TB,PB是以1024与byte进行换算●进制用符号进行计数十进制、二进制、八进制(011)、十六进制(0xFF)字符文字和符号的总称●字符集多个字符集合的总称。

ASCII字符集、GB2312字符集、GBK字符集、BIG5字符集、GB18003字符集、Unicode字符集●byte可表示2^8=256个字符的表示0 0×00 0000,00001 0×01 0000,00012 0×01 0000,0010127 0×7F 0111,1111-128 0×80 1000,0000-2 0xFE 1111,1110-1 0xFF 1111,1111●以补码的形式表示的二进制编码。

-2的表示,2=0000,0010,反码1111,1101,补码=反码+1=111111101111,1110表示的就是1111,1110-1=1111,1101,取反就是0000,0010也就是2,所以就是-22.字符集和编码2.1.字符(Character)字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。

2.2.字符集(Character Set)一组抽象字符的集合就是字符集(Character Set)。

字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。

一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。

字符集的子集也是字符集。

计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding)。

制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。

Java字符编码(一)Unicode字符编码

Java字符编码(一)Unicode字符编码

Java字符编码(⼀)Unicode字符编码Java 字符编码(⼀)Unicode 字符编码⼀、字符编码规范1.1 ASCII(American Standard Code for Information Interchange)美国信息交换标准代码,这是计算机上最早使⽤的通⽤的编码⽅案。

那个时候计算机还只是拉丁⽂字的专利,根本没有想到现在计算机的发展势头,如果想到了,可能⼀开始就会使⽤ unicode 了。

当时绝⼤部分专家都认为,要⽤计算机,必须熟练掌握英⽂。

这种编码占⽤ 7 个Bit,在计算机中占⽤⼀个字节,8 位,最⾼位没⽤,通讯的时候有时⽤作奇偶校验位。

因此 ASCII 编码的取值范围实际上是:0x00-0x7f,只能表⽰ 128 个字符。

后来发现 128 个不太够⽤,做了扩展,叫做 ASCII 扩展编码,⽤⾜⼋位,取值范围变成:0x00-0xff,能表⽰ 256 个字符。

其实这种扩展意义不⼤,因为 256 个字符表⽰⼀些⾮拉丁⽂字远远不够,但是表⽰拉丁⽂字,⼜⽤不完。

所以扩展的意义还是为了下⾯的 ANSI 编码服务。

1.2 ANSI(American National Standard Institite )美国国家标准协会,也就是说,每个国家(⾮拉丁语系国家)⾃⼰制定⾃⼰的⽂字的编码规则,并得到了 ANSI 认可,符合 ANSI 的标准,全世界在表⽰对应国家⽂字的时候都通⽤这种编码就叫 ANSI 编码。

换句话说,中国的 ANSI 编码和在⽇本的 ANSI 的意思是不⼀样的,因为都代表⾃⼰国家的⽂字编码标准。

⽐如中国的 ANSI 对应就是 GB2312 标准,⽇本就是 JIT 标准,⾹港,台湾对应的是 BIG5 标准等等。

当然这个问题也⽐较复杂,微软从 95 开始,⽤就是⾃⼰搞的⼀个标准 GBK。

GB2312 ⾥⾯只有 6763 个汉字,682 个符号,所以确实有时候不是很够⽤。

GBK ⼀直能和 GB2312 相互混淆并且相安⽆事的⼀个重要原因是 GBK 全⾯兼容 GB2312,所以没有出现任何冲突,你⽤GB2312 编码的⽂件通过 GBK 去解释⼀定能获得相同的显⽰效果,换句话说:GBK 对 GB2312 就是,你有的,我也有,你没得的,我还有!好了,ANSI 的标准是什么呢,⾸先是 ASCII 的代码你不能⽤!也就是说 ASCII 码在任何 ANSI 中应该都是相同的。

Unicode代码点与编码方式

Unicode代码点与编码方式

Unicode代码点与编码方式一、Unicode字符集UTF编码,全称是Unicode Transformer Format,这种编码是UCS(Universal Mutiple-Octet Doded Character Set,国际标准ISO10646规定的通用字符集)的实际形式,它的分类是按照其基本长度所占用的位数而定,分为UTF-8/16/32三种形式。

UTF可以说是其他字符集的集合,它使得其它字符集是交叉兼容的,可以说,凡是将文字符号转为UCS后再转回原来的编码,也不会丢失信息。

UCS包含了现在所有的已知语言的字符,包含从拉丁文、希腊语到中文、韩文等象形文字,再到日文的平假名、片假名等众多语系。

因此使用UTF 进行程序开发,绝对是程序国际化的首选,Unicode将世界的语言统一起来,构成了最伟大的字符集。

二、代码点与代码单元代码点和代码单元,是从Unicode标准而来的术语,Unicode标准的核心是一个编码字符集。

代码点Code Point:与一个Unicode编码表中的某个字符对应的代码值。

代码单元 Code Unit:一个Java中的char,可以理解为字符编码的一个基本单元。

三、编码方式Unicode编码空间从U+000000到U+10FFFF,Unicode4.0将字符分配给这1112064个代码点中的96382个代码点。

Unicode的编码空间划为17个平面,每个平面包含216(65536)个码位。

17个平面码位可表示为“U+xx0000”到“U+xxFFFF”(xx表示十六进制从0x00到0x10,共计17个平面)。

从U+000000至U+00FFFF之间的字符称为基本多文种平面(BMP)。

这是16位编码的原始标准,早期由于错误地估算了代码点的容量范围,认为Unicode最多只需要2^16个代码点。

其他平面为辅助平面,也就是代码点在U+10000至U+10FFFF 范围之间的字符,又称为增补字符,也就是那些使用原始的Unicode 的16位设计无法表示的字符。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

Java中编码以及Unicode总结
1.基本概念
●bit 位只能是0或者1
●byte 字节一个字节是8位,1 byte=8 bits 计算机表示的基本单位
●KB,MB,GB,TB,PB是以1024与byte进行换算
●进制用符号进行计数十进制、二进制、八进制(011)、十六进制(0xFF)
字符文字和符号的总称
●字符集多个字符集合的总称。

ASCII字符集、GB2312字符集、GBK字符集、BIG5
字符集、GB18003字符集、Unicode字符集
●byte可表示2^8=256个字符的表示
0 0×00 0000,0000
1 0×01 0000,0001
2 0×01 0000,0010
127 0×7F 0111,1111
-128 0×80 1000,0000
-2 0xFE 1111,1110
-1 0xFF 1111,1111
●以补码的形式表示的二进制编码。

-2的表示,2=0000,0010,反码1111,1101,补码=反码+1=
1111,1110表示的就是1111,1110-1=1111,1101,取反就是0000,0010也就是2,所以
就是-2
2.字符集和编码
2.1.字符(Character)
字符(Character)是文字与符号的总称,包括文字、图形符号、数学符号等。

2.2.字符集(Character Set)
一组抽象字符的集合就是字符集(Character Set)。

字符集常常和一种具体的语言文字对应起来,该文字中的所有字符或者大部分常用字符就构成了该文字的字符集,比如英文字符集。

一组有共同特征的字符也可以组成字符集,比如繁体汉字字符集、日文汉字字符集。

字符集的子集也是字符集。

计算机要处理各种字符,就需要将字符和二进制内码对应起来,这种对应关系就是字符编码(Encoding)。

制定编码首先要确定字符集,并将字符集内的字符排序,然后和二进制数字对应起来。

根据字符集内字符的多少,会确定用几个字节来编码。

每种编码都限定了一个明确的字符集合,叫做被编码过的字符集(Coded Character Set),这是字符集的另外一个含义。

通常所说的字符集大多都是指编码字符集(Coded Character Set)。

ASCII(American Standard Code for Information Interchange,美国信息互换标准代码)是基于罗马字母表的一套电脑编码系统。

由美国国家标准局(ANSI)制定。

7位,可以表示2^7=128个字符。

在计算机的存储单元中,一个ASCII码值占一个字节(8个二进制位),其最高位(b7)用作奇偶校验位。

7位编码的字符集只能支持128个字符,为了表示更多的欧洲常用字符对ASCII进行了扩展,ASCII扩展字符集使用8位(bits)表示一个字符,共256字符。

ASCII扩展字符集比ASCII字符集扩充出来的符号包括表格符号、计算符号、希腊字母和特殊的拉丁符号。

2.2.2.GB2312 字符集
GB2312又称为GB2312-80字符集,全称为《信息交换用汉字编码字符集?基本集》,由原中国国家标准总局发布,1981年5月1日实施。

在中国大陆和新加坡获广泛使用。

GB2312收录简化汉字及一般符号、序号、数字、拉丁字母、日文假名、希腊字母、俄文字母、汉语拼音符号、汉语注音字母,共7445 个图形字符。

其中包括6763个汉字,其中一级汉字3755个,二级汉字3008个;包括拉丁字母、希腊字母、日文平假名及片假名字母、俄语西里尔字母在内的682个全角字符。

GB2312中对所收汉字进行了“分区”处理,每区含有94个汉字/符号。

这种表示方式也称为区位码。

各区包含的字符如下:01-09区为特殊符号;16-55区为一级汉字,按拼音排序;56-87区为二级汉字,按部首/笔画排序;10-15区及88-94区则未有编码。

两个字节中前面的字节为第一字节,后面的字节为第二字节。

习惯上称第一字节为“高字节”,而称第二字节为“低字节”。

“高位字节”使用了0xA1-0xF7 (把01-87区(88-94区未有编码)的区号加上0xA0),“低位字节”使用了0xA1-0xFE (把01-94加上0xA0)。

以GB2312字符集的第一个汉字“啊”字为例,它的区号16,位号01,则区位码是1601,在大多数计算机程序中,高字节和低字节分别加0xA0得到程序的汉字处理编码0xB0A1。

计算公式是:0xB0=0xA0+16, 0xA1=0xA0+1。

2.2.
3.GBK 字符集
GBK全名为汉字内码扩展规范,英文名Chinese Internal Code Specification。

K 即是“扩展”所对应的汉语拼音(KuoZhan11)中“扩”字的声母。

GBK 来自中国国家标准代码GB 13000.1-93。

GBK: 汉字国标扩展码,基本上采用了原来GB2312-80所有的汉字及码位,并涵盖了原Unicode中所有的汉字20902,总共收录了883个符号,21003个汉字及提供了1894个造字码位。

[(GBKH-0xB0)*0x5E+(GBKL-0xA1)]*(汉字离散后每个汉字点阵所占用的字节) GBK是GB2312的扩展,是向上兼容的,因此GB2312中的汉字的编码与GBK中汉字的相同。

另外,GBK中还包含繁体字的编码。

GBK中每个汉字仍然包含两个字节,第一个字节的范围是0×81-0xFE(即129-254),第二个字节的范围是0×40-0xFE(即64-254)。

GBK中有码位23940个,包含汉字21003个。

又称大五码或五大码,1984年由台湾财团法人信息工业策进会和五间软件公司宏碁(Acer)、神通(MiTAC)、佳佳、零壹(Zero One)、大众(FIC)创立,故称大五码。

Big5码的产生,是因为当时台湾不同厂商各自推出不同的编码,如倚天码、IBM PS55、王安码等,彼此不能兼容;另一方面,台湾政府当时尚未推出官方的汉字编码,而中国大陆的GB2312编码亦未有收录繁体中文字。

Big5字符集共收录13,053个中文字,该字符集在中国台湾使用。

耐人寻味的是该字符集重复地收录了两个相同的字:“兀”(0xA461及0xC94A)、“嗀”(0xDCD1及0xDDFC)。

Big5码使用了双字节储存方法,以两个字节来编码一个字。

第一个字节称为“高位字节”,第二个字节称为“低位字节”。

高位字节的编码范围0xA1-0xF9,低位字节的编码范围0×40-0×7E及0xA1-0xFE。

各编码范围对应的字符类型如下:0xA140-0xA3BF为标点符号、希腊字母及特殊符号,另外于0xA259-0xA261,存放了双音节度量衡单位用字:兙兛兞兝兡兣嗧瓩糎;0xA440-0xC67E为常用汉字,先按笔划再按部首排序;0xC940-0xF9D5为次常用汉字,亦是先按笔划再按部首排序。

2.2.5.GB18030字符集
GB 18030的全称是GB18030-2000《信息交换用汉字编码字符集基本集的扩充》,是我国政府于2000年3月17日发布的新的汉字编码国家标准,2001年8月31日后在中国市场上发布的软件必须符合本标准。

GB 18030-2000收录了27533个汉字,GB 18030-2005收录了70244个汉字。

GB18030的总编码空间超过150万个码位。

GB 18030字符集标准解决汉字、日文假名、朝鲜语和中国少数民族文字组成的大字符集计算机编码问题。

该标准的字符总编码空间超过150万个编码位,收录了27484个汉字,覆盖中文、日文、朝鲜语和中国少数民族文字。

满足中国大陆、香港、台湾、日本和韩国等东亚地区信息交换多文种、大字量、多用途、统一编码格式的要求。

并且与Unicode 3.0版本兼容,填补Unicode扩展字符字汇“统一汉字扩展A”的内容。

并且与以前的国家字符编码标准(GB2312,GB13000.1)兼容。

GB 18030标准采用单字节、双字节和四字节三种方式对字符编码。

单字节部分使用0×00至0×7F码(对应于ASCII码的相应码)。

双字节部分,首字节码从0×81至0×FE,尾字节码位分别是0×40至0×7E和0×80至0×FE。

四字节部分采用GB/T 11383未采用的0×30到0×39作为对双字节编码扩充的后缀,这样扩充的四字节编码,其范围为0×到0×FE39FE39。

其中第一、三个字节编码码位均为0×81至0×FE,第二、四个字节编码码位均为0×30至0×39。

双字节部分收录内容主要包括GB13000.1全部CJK汉字20902个、有关标点符号、表意文字描述符13个、增补的汉字和部首/构件80个、双字节编码的欧元符号等。

四字节部分收录了上述双字节字符之外的,包括CJK统一汉字扩充A在内的GB 13000.1中的全部字符。

2.2.6.ANSI编码
不同的国家和地区制定了不同的标准,由此产生了GB2312, BIG5, JIS 等各自的编码标。

相关文档
最新文档