-
代码点和代码单元
2018-09-20 10:55:23代码单元:指一个已编码文本中具有最短比特组合的单元。使用UTF-8,代码单元为8比特;使用UTF-16,代码单元为16比特。 Unicode编码字符集有65536个字符,将这些字符表示成统一长度每个字符需要2个字节,即16比特,...代码点:计算机处理字符时要将字符数字化,所以需要对字符进行编码。编码字符集中每个字符都与一个编号对应,我们将这个编号称为代码点。
代码单元:指一个已编码文本中具有最短比特组合的单元。使用UTF-8,代码单元为8比特;使用UTF-16,代码单元为16比特。
Unicode编码字符集有65536个字符,将这些字符表示成统一长度每个字符需要2个字节,即16比特,所以若使用UTF-8编码,每个字符需要2个代码单元;使用UTF-16编码,需要1个代码单元。因此一串字符串代码点和代码单元数量可能不等。
String s = "Hello"; int n = s.length(); //得到的长度为代码单元数量 int cpCount = s.codePointCount(0, s.length()); //得到代码点数量,即实际长度 char a = s.charAt(n); //返回位置为n的代码单元 int index = s.offsetByCodePoins(0, n); char cp = (char) s.codePointAt(index); //返回第n个代码点对应的字符
-
代码单元与代码点
2017-03-17 14:34:19代码单元(Code Unit)则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元 如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节 区别在于一个字符,仅仅...代码点(Code Point)就是指Unicode中为字符分配的编号,一个字符只占一个代码点
如字符A的代码点为U+0041
代码单元(Code Unit)则是针对编码方法而言,它指的是编码方法中对一个字符编码以后所占的最小存储单元
如UTF-8中,代码单元是一个字节,因为一个字符可以被编码为1个,2个或者3个4个字节
区别在于一个字符,仅仅对应一个代码点,但却可能有多个代码单元
应用
当你想以一种统一的方式指定自己使用什么字符的时候,使用代码点总是比使用代码单元更好
在Java中,字符串不是Unicode字符或者代码点的序列,而是代码单元。
Java中的代码单元指表示编码表字符的最小存储单元,用16位表示
附录
Unicode的标准是用来解决字符编码问题,在Unicode之前有很多不兼容的字符编码方式,如英语中7比特ASCII标准,用代表所有的英文字符,小数和符号,在西欧ASCII被拓展成8比特。于是Unicode设计唯一的16比特值,但是遇到中文还是不够用,现在Unicode需要21比特。还有变长的向后兼容的UTF-16.
UTF-8是一种针对Unicode的可变长度字符编码. -
java 码点与代码单元的区分 及 代码单元的数量和码点的数量
2017-08-20 15:01:27java字符串由char值序列组成,char的数据类型是一个采用Unicode码点的代码单元。 即:char数据类型是一个代码单元 任意Unicode字符都是一个码点,大多数常用的Unicode码点由一个char代码单元组成,辅助字符码点由...java字符串由char值序列组成,char的数据类型是一个采用Unicode码点的代码单元。
即:char数据类型是一个代码单元
任意Unicode字符都是一个码点,大多数常用的Unicode码点由一个char代码单元组成,辅助字符码点由两个char代码单元组成。
代码单元的数量和码点的数量
1、代码单元数量(str.length()不是实际的字符串长度:辅助字符算两个):String str="hello"; int n=str.length(); System.out.println(n);
2、码点数量(实际的字符的个数,辅助字符算一个):
int m=str.codePointCount(0,str.length()); System.out.println(m);
codePointCount的用法:
codePointCount
int codePointCount(int beginIndex , int endIndex)
返回此 String 的指定文本范围中的 Unicode 代码点数。文本范围始于指定的 beginIndex,一直到索引 endIndex - 1 处的 char。因此,该文本范围的长度(用 char 表示)是 endIndex-beginIndex。该文本范围内每个未配对的代理项计为一个代码点。
常见的求整个字符串长度的用法:String str="hello"; int n=str.codePointCount(0, str.length()); System.out.println(n);
-
Java中码点和代码单元
2018-10-26 23:54:39Java中码点和代码单元 前言 码点和代码单元这两个概念还是在《Java核心技术 卷一》发现的,这也是我看过这本书里面前五章中比较有用的一个知识点(PS:毕竟Java开发都一年了,基础应用都差不多了),以前都没听过...Java中码点和代码单元
前言
码点和代码单元这两个概念还是在《Java核心技术 卷一》发现的,这也是我看过这本书里面前五章中比较有用的一个知识点(PS:毕竟Java开发都一年了,基础应用都差不多了),以前都没听过。
概念
在介绍这个概念之前,建议大家先去看看一些编码方面的知识。《编码格式简介(ANSI、GBK、GB2312、UTF-8、GB18030和 UNICODE)》,这篇文章讲的挺好。每个国都有把自己的语言编码,于是出现了各种各样的编码(美国的ASCII,中国的GBK,俄罗斯的KOI-8等),如果你不安装相应的编码,就无法解释相应编码想表达的内容。最后 ISO 一起创造了一种编码 UNICODE ,这种编码非常大,大到可以容纳世界上任何一个文字和标志。所以只要电脑上有 UNICODE 这种编码系统,无论是全球哪种文字,只需要保存文件的时候,保存成 UNICODE 编码就可以被其他电脑正常解释。
而在设计Java时,当时的Unicode才发布1.0版本,字符连65536代码值一半都不到,为了方便后面增加,Java使用了16位的Unicode字符集。但是没想到,随着计算机的普及,各国计算机的发展,16位也放不下人类的集体文化财富。
码点是指一个编码表中的某个字符对应的代码值。Unicode的码点分为17个代码级别,第一个级别是基本的多语言级别,码点从U+0000——U+FFFF,其余的16个级别从U+10000——U+10FFFF,其中包括一些辅助字符。
基本的多语言级别,每个字符用16位表示代码单元,而辅助字符采用连续的一对连续代码单元进行编码。代码实例
下面hi𝕆中的𝕆实际上是是一个辅助字符,它实际上占用了两个char来保存,这个字符串中总共为4个char,3个代码点。
public static void main(String[] args) { String hello = "hi𝕆"; System.out.println(hello.length());//4 System.out.println(hello.codePointCount(0, hello.length()));//3 }
下列代码中显示了每个char的16进制和每个代码单元的16进制。
public static void main(String[] args) { String hello = "hi𝕆"; int length = hello.length(); for(int i=0;i<length;i++) { char charAt = hello.charAt(i); System.out.println(Integer.toHexString(charAt)); } int codePointCount = hello.codePointCount(0, length); for(int i=0;i<codePointCount;i++) { int index = hello.offsetByCodePoints(0,i); int charAt = hello.codePointAt(index); System.out.println(Integer.toHexString(charAt)); } }
分为4个代码单元
68 69 d835 dd46
3个码点
68 69 1d546
而码点转化为字符串则需要使用一些特殊的API,比如:
判读是不是一个码点,上文的d835或者dd46肯定不是Character.isValidCodePoint(codePoint)
码点转化为字符串:
char[] chars = Character.toChars(0x1d546); String str = new String(chars); System.out.println(str);//𝕆
-
c#代码单元测试
2019-04-29 14:52:52c#代码单元测试 在原项目上新建测试项目 选择测试项目 打开测试资源管理器 在测试方法里写入你要测试的内容(原项目的类,方法等),运行 运行完成后可查看打印输出 ... -
码点(code point)和代码单元(code unit),以及String对象中操作码点和代码单元
2019-01-09 16:57:02一个代码单元是一个用来存储编码码点的一部分的单元。在UTF-8中,一个代码单元是8位;在UTF-16中,一个代码单元是16位。 单独的一个代码单元可能代表一个完整的码点,也可能是一个码点的一部分。 例如,一个雪人字符... -
代码点与代码单元和Unicode相关的UTF
2018-01-21 23:11:52java字符串由char序列组成,char数据类型是一个采用UTF-16编码表示Unicode代码点的代码单元,大多数的常用Unicode字符使用一个代码单元就可以表示,而辅助字符需要一对代码单元来表示,length方法返回的是采用UTF-16... -
Java中的代码点与代码单元
2016-11-11 17:29:19什么是代码点与代码单元? 代码点(Code Point):在 Unicode 代码空间中的一个值,取值 U+0000 至 U+10FFFF,代表一个字符。 其中U+0000到U+FFFF为基本字符,U+10000到U+10FFFF为增补字符。 代码单元(Code Unit... -
关于代码点和代码单元的一些问题
2016-11-17 20:39:29在Java字符串处理时,在使用length和charAt方法时,应该格外小心,因为length返回的是UTF-16编码表示下的代码单元数量,而非我们所认为的字符的个数,charAt方法返回的是指定位置处的代码单元,而非我们所认为的字符... -
Java中的string实际长度详解(代码点和代码单元)
2018-06-02 21:05:18现在讨论Java中和String有关的代码点和代码单元。Java中的字符串有char序列组成,在前面讲过,char数据类型是一个采用UTF-16编码表示的Unicode代码点的代码单元。我们常用的大多数Unicode字符使用一个代码单元就可以... -
(原)代码点与代码单元
2014-10-31 19:47:27最近在核心技术上看到代码点与代码单元的说法,网上看了很多总感觉说得复杂,最后总结了一下,纯属个人见解。 Unicode标准的核心是一个编码字符集,它为每一个字符分配一个唯一数字。Unicode标准始终使用16进制... -
代码点和代码单元的关系
2008-03-25 11:05:00代码点和代码单元的关系要了解 Crystal Reports for Visual Studio 2005 支持 GB18030 和 Unicode 的方式,很重要的是要了解代码点和代码单元的关系。代码点和代码单元在每种编码形式中,代码点被映射到一个或多个... -
码点,代码单元,辅助字符
2018-05-03 19:12:49任意Unicode字符都是一个码点,大多数常用的Unicode码点由一个char代码单元组成,辅助字符码点由两个char代码单元组成。 -
“Java核心技术代码点和代码单元”部分学习
2015-11-15 18:14:36代码点和代码单元 这部分属于Unicode的范畴:Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。 在表示一个Unicode的字符时,通常会用“U+”然后紧接着一组十六进制的数字来表示这一个字符。... -
[Java Core]Java字符串的代码点和代码单元
2015-09-03 13:46:41Java Core的3.6.6有关代码点和代码单元的概念可能让很多同学迷惑,在这里做一点说明。 Java char数据类型实际上采用UTF-16编码表示的Unicode的代码单元 String str = "你好!"; 这里str中的第一个代码单元是... -
java核心卷轴-----代码点和代码单元
2016-01-11 21:43:25代码单元:表示8位一个字节,也就是一个char字符 eg: String ss="12344546"; ss.length //得到代码单元的长度 ss.charAt(5)//得到第6 个代码单元为'5' 代码点:表示Unicode编码 int index = ss.... -
Java中的代码点和代码单元
2013-05-29 23:20:46char:java中,char类型为16位,原本用于表示一个字符。但是后来发现,16位已经不够表示所有的字符,所以后来发展出了用代码点表示字符的方法。...代码单元:对代码点进行编码得到的1或2个16位序列(UTF-16)。其 -
代码点与代码单元
2014-08-08 00:12:06代码点可理解为字符。一个代码点就是一个字符 -
代码点(code point)和代码单元(code units)
2017-08-10 21:13:011. 解释一 char:Java中,char类型为16个二进制位,原本用于表示一个字符。但后来发现,16位已经不够表示所有的字符,所以后来发展出了代码点表示字符的方法。 代码点(code point):是指编码字符集中... 代码单元 -
7.视字符串为16位的代码单元序列
2017-12-14 06:41:35JavaScript字符串由16位的代码单元组成,而不是由Unicode代码点组成 JavaScript使用两个代码单元表示216及其以上的Unicode代码点。这两个代码单元被称为代理对。 代理对甩开了字符串元素计数,length、charAt、... -
JAVA 代码点和代码单元
2016-12-27 21:46:08代码点指编码表(比如Unicode)中某个字符的代码值(数字),在Unicode标准中,代码点采用十六进制书写,书写时前面加U+,比如U+0041是字母A的代码点. Unicode的代码点可以分为17个代码级别。第一个代码级别称为基本的... -
代码点和代码单元的理解-Java
2019-04-03 00:20:16代码点(code point):与一个编码表中的某个字符对应的代码值. 在Unicode标准中,代码点采用十六进制书写,并加上前缀U+,例U+0041就是字母A的代码点. Unicode的代码点可以分成17个代码级别(code plane). 第一个代码... -
Core Java (八) Java中的代码点与代码单元
2013-01-21 21:51:21最近看core java,之前一直不明白,看了不少帖子和博客,总算搞明白了。 Java中,char[]、String、StringBuilder和StringBuffer类中采用了UTF-16编码,使用U+0000~U+FFFF来...大多数的常用Unicode字符使用一个代码单元 -
java中的代码点和代码单元
2017-10-09 11:24:16背景 在设计Java时决定采用16位的Unicode字符集,因为当时只用不到65536一半的大小就可以存放下Unicode...因此出现了代码点。 代码点 指与一个编码表中的某个字符对应的代码值。在Unicode标准中,代码点采用十六进 -
Jupyter notebook操作代码单元
2019-04-20 09:44:16在这个notebook中,你将尝试操作代码单元格 首先,运行以下代码单元格。就像之前我所提到的,你可以通过选中并点击运行(run cell)按钮来运行代码单元格。另外,你也可以通过快捷键 Shift + Enter 来运行。使用...