Java中编码以及Unicode总结
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编码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编码

基础概念
字符 字符集(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中,对于越南文的处理需要使用适当的编码格式。
越南文是东南亚的一种语言,其文字包括越南语中的「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使⽤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 中常用的编码格式有:
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概念基础(转载)第⼀篇: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中文转换转换背景:把中文转换成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编码的字符串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 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 等各自的编码标。