-
Unicode 可以代表当年世界所有的字符!
-
代码点其实就是某个字母相关联的数字,计算机世界上每个字符都有唯一的对应数字
-
UTF-8,UTF-16是指编码标准方案,比如utf8,就是指一个字符用1-4个byte 进行表示!
-
utf16是指一个字符用一到2 个 16位为单位的代码单元进行表示。其中有规定,如果用一个编码单元进行标识时,不能用U+D800 至 U+DFFF 保留用于
UTF-16;没有这些值分配字符作为代码点 来表示!
因为他们用来表示需要2个代码单元来表示时,作为相应的高低位范围。 高代理范围(U+D800
至U+DBFF),第二个单元来自于低代理范围(U+DC00至
U+DFFF)来表示。
-
String s = "\u0041\u00DF\u6771\uD801\uDC00";
System.out.println(s.length());
System.out.println(s.getBytes("UTF-8").length);
System.out.println("Print out length one by one...");
System.out.println("\u0041".getBytes("UTF-8").length);
System.out.println("\u00DF".getBytes("UTF-8").length);
System.out.println("\u6771".getBytes("UTF-8").length);
System.out.println("\uD801\uDC00".getBytes("UTF-8").length);
上面输出5,表示5个utf16编码单元!
-
5
10
Print out length one by one...
1
2
3
4
字符编码基本概念:
Q: 什么是字符?
A: 字符(character
)是抽象的最小文本单位。它没有固定的形状(可能是一个字形),而且没有值。“A”是一个字符,“严”是一个字符,“€”(德国、法国和许多其他欧洲国家通用货币的标志)也是一个字符。
Q: 什么是字符集?
A: 字符集(character set
)是字符的集合。例如,汉字字符是中国人最先发明的字符,在中文、日文、韩文和越南文的书写中使用。
Q:什么是编码字符集?
A:编码字符集(coded characterset
)是一个字符集,它为每一个字符分配一个唯一数字。Unicode 标准的核心是一个编码字符集,字母“A”的编码为 004116
和字符“€”的编码为 20AC16
。Unicode 标准始终使用十六进制数字,而且在书写时在前面加上前缀“U+”,所以“A”的编码书写为“U+0041”。
Q: 什么是代码点?
A: 代码点(Code points
)是指可用于编码字符集的数字。编码字符集定义一个有效的代码点范围,但是并不一定将字符
分配给所有这些代码点。有效的 Unicode 代码点范围是 U+0000 至 U+10FFFF。Unicode 4.0
将字符分配给一百多万个代码点中的 96,382 代码点。
比如 unicode U+20C30 的代码点为134192,U+20C30和134192是等价的。在java中可通过int i =Integer.parseInt("20C30", 16);得到其代码点。
Q: 什么是增补字符?
A: 增补字符(Supplementarycharacters
)是代码点在 U+10000 至 U+10FFFF
范围之间的字符,也就是那些使用原始的 Unicode 的 16 位设计无法表示的字符。从 U+0000 至 U+FFFF
之间的字符集有时候被称为基本多语言面 (BMP)。因此,每一个 Unicode 字符要么属于 BMP,要么属于增补字符。
Q: 什么是字符编码方案?
A: 字符编码方案(character encodingscheme
)是从一个或多个编码字符集到一个或多个固定宽度代码单元序列的映射。最常用的代码单元是字节,但是 16 位或 32 位整数也可用于内部处理。UTF-32、UTF-16 和 UTF-8 是 Unicode 标准的编码字符集的字符编码方案。
Q: UTF-32、UTF-16 、UTF-8 都是什么意思?
A: 这些都是unicode的编码方式,说白了就是如何用二进制来表示unicode。
UTF-32 即将每一个 Unicode 代码点表示为相同值的 32 位整数。很明显,它是内部处理最方便的表达方式,但是,如果作为一般字符串表达方式,则要消耗更多的内存。
UTF-16 使用一个或两个未分配的 16 位代码单元的序列对 Unicode 代码点进行编码。值 U+0000 至U+FFFF
编码为一个相同值的 16位单元。增补字符编码为两个代码单元,第一个单元来自于高代理范围(U+D800
至U+DBFF),第二个单元来自于低代理范围(U+DC00至
U+DFFF)。这在概念上可能看起来类似于多字节编码,但是其中有一个重要区别:值U+D800 至 U+DFFF 保留用于
UTF-16;没有这些值分配字符作为代码点。这意味着,对于一个字符串中的每个单独的代码单元,软件可以识别是否该代码单元表示某个单单元字符,或者是
否该代码单元是某个双单元字符的第一个或第二单元。这相当于某些传统的多字节字符编码来说是一个显著的改进,在传统的多字节字符编码中,字节值 0x41
既可能表示字母“A”,也可能是一个双字节字符的第二个字节。
UTF-8 使用一至四个字节的序列对编码 Unicode 代码点进行编码。U+0000 至U+007F 使用一个字节编码,U+0080至
U+07FF 使用两个字节,U+0800 至 U+FFFF使用三个字节,而U+10000 至 U+10FFFF 使用四个字节。UTF-8
设计原理为:字节值 0x00 至0x7F 始终表示代码点U+0000 至 U+007F(Basic Latin 字符子集,它对应 ASCII
字符集)。这些字节值永远不会表示其他代码点,这一特性使 UTF-8 可以很方便地在软件中将特殊的含义赋予某些 ASCII 字符。
Unicode符号范围 | UTF-8编码方式
分享到:
相关推荐
此文档为Java中编码方式和Unicode知识总结,对了解学习Java编码的讲解很全面清楚!
Java中编码以及Unicode总结
//默认解码:Unicode,四个字节 //编码解码2:指定编码 String str2 = "你好"; byte[] buf2 = str2.getBytes("UTF-8");//指定解码:UTF-8,六个字节 //编码解码3:编码正确解码错误 String str3 = "你好"; ...
北京动力节点-Java编程零基础教程-030-Java语言概述-重难点总结.avi 北京动力节点-Java编程零基础教程-031-Java基本语法-注释-单行注释与多行注释.avi 北京动力节点-Java编程零基础教程-032-Java基本语法-注释-...
JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...
Annotation [java] 代码注释 [ænәu'teiʃәn] anonymous adj.匿名的[ә'nɒnimәs]'(反义:directly adv.直接地,立即[di'rektli, dai'rektli]) apply v.应用,适用 [ә'plai] application n.应用,应用程序 [,æ...
Java 库 如果您已经知道什么是 Unicode 并且您确定您知道要将其转换为 7 位 ASCII 以及它的缺点,您可以跳过闲聊并跳转到 或 。 此页面包含 Unicode 字符。 如果您使用的字体不包含所有字符,您可能会得到一个乱码...
简介:这份资源是我以前偶然间在网上找到的一份前辈总结的很实用的java实例,有时间我就拿出来看看,不只是应用,算法的实现过程也很重要。我觉得这份文档对于java开发人员来说是很实用的,所以拿出来分享一下。 ...
Java中的String类默认是Unicode编码,大家平常所说的UTF-8就是使用最广的一种unicode的实现方式,以下我们还是来看一下Java中的字符编码问题处理心得总结:
在学习过程中也要和集合一样,首先了解JAVA的整个IO包的结构,然后在具体的类的学习中总结常用通用方法,找到相同的规律减少学习时间和难度。 1. 什么是IO? I:input 输入 通常做读取操作(将不同数据源的数据读入...
java开发工作多年总结的的一些工具类; 包括有: 1、常用的日期类操作 2、excel操作 3、xml操作 4、集成科大讯飞语言合成工具类; 5、集合类操作(list,map,array) 6、FTP工具类 7、csv操作 8、file文件类操作 9...
本节总结了使用该库时的所有安全注意事项。 请确保在选择使用 Jargon2 之前对其进行评估,并定期访问此部分以获取任何更新。 物品 描述 正常化 选择将密码转换为 Unicode 标准形式会在内存中留下短暂的副本。 有关更...
第3章 Java语言基础3.1 Java简介3.1.1 Java概述3.1.2 Java语言特点3.1.3 Java组成与体系3.1.4 Java运行体系3.2 Java基础3.2.1 Java数据类型3.2.2 Java常量3.2.3 Java变量3.2.4 Unicode字符集3.3 Java基本元素3.3.1 ...
M3U8批量转换开发总结 开发时间表 2020年1月13日 开始java层开发,设计demoUI,制作文件搜索功能 2020年1月24日 开始cpp层开发,尝试使用ndk编译ffmpeg.so,尝试使用jni调用ffmpeg转码功能 2020年2月10日 开始制作...
总结 - 应用目标: 构建一个模块化、可扩展的应用程序,管理与任何类型对象的历史相关的任何学科的研究记录、分析和报告 构建符合 GPL 开源环境的应用 使用单一代码库构建可在 Windows、Macintosh 和 Linux 操作系统...
第一,javascript沿用java的字符处理方式,内部是使用unicode来处理所有字符的, 第二,utf-8是每个汉字(unicode字符)用3个字节来存储。 第三,用utf-8来send数据是不会出现乱码的,是后台程序没有正确解码才会...
JAVA模版引擎Freemarker常用标签(一) 1. if指令 这是一个典型的分支控制指令,该指令的作用完全类似于Java语言中的if,if指令的语法格式如下: <#if condition>... <#elseif condition>... <#elseif condition>......
对Eclipse的爱和我对Java的爱一样深。关于MyEclipse的使用,自己总结了点常用的设置。 1、修改提示的快捷键: Window -> Preferences -> General -> Keys 在type filter text栏输入Content , 选中Content Assist ...
今天和伙计萌一起写JSP的时候,应用到了修改编码,所以自己也总结一下这个原理,参考了很多写的不错的文章。 可能很多编程的伙伴萌学到了,tomcat 和 JSP(java server page) 这里先引出几个常见的英文: charset英文...
本文避免纠缠不同编码格式的具体异同,以 Unicode 为核心,以简体中文为例,从工程应用角度分析编码问题存在的原因,不仅提出 C/C++ 标准库编程的解决方案,更结合项目经验,总结出处理多国语言编码问题的一般思路。...