char类型和Unicode编码
3.1)除了可以采用转义序列符 \u 表示Unicode 代码单元的编码外, 还有一些用于表示特殊字符的转移序列符,看下表:3.2)所有这些转义序列符都可以出现在字符常量或字符串的引号内;如'\u2122' 和 "hello\n";3.3)转移序列符 \u 还可以出现在 字符常量或字符串的引号之外(其他的转移序列不可以), 如 public static void main(String \u005B\u005D args) ,其中 \u005B 和 \u005D 是 '[' 和 ']' 的编码;
4.1)要想弄清char类型, 就必须了解Unicode编码表(干货——引入了Unicode编码表)。Unicode打破了传统字符编码的限制。在Unicode出现之前, 已经有许多不同的标准:美国的ASCII、西欧语言的ISO、中国的GB 18030 和 BIG-5 等, 这样就产生了两个问题:一是对于任意给定的代码值,在不同的编码方案下有可能对应不同的字母; 二是采用大字符集的语言其编码长度有可能不同;(如一些字符采用单字节编码,而另一些字符采用多字节编码)4.2)如何解决:人们认为两个字节的代码宽度足以能够对世界上各种语言的所有字符进行编码, 并有足够的空间留给未来的扩展;4.3)1991年,发布的Unicode1.0 : 仅占用了 65535个代码值中不到一半的部分,在设计Java时 决定采用16位的Unicode 字符集;但是后来Unicode 增加了对汉语、日语和韩语的处理使得字符个数超过了 65536, 这样使得 Java的16位的 char 类型已经不能满足描述所有 Unicode字符的需要了;
5.1)代码点: 从JDK5.0开始, 代码点是指与一个编码表中的某个字符对应的代码值;在Unicode标准中, 代码点采用16进制书写,并加上前缀 U+, 例如 U+0041 表示字符A的代码点;(干货——代码点的定义)5.2)代码级别:Unicode的代码点可以分成17 个代码级别, 第一个代码级别称为基本的多语言级别, 代码点从 U+0000~U+FFFF;其余的16个附加级别,代码点从U+10000~U+10FFFF, 其中包括了一些辅助字符;(干货——代码级别的定义)5.3)代码单元:在UTF-16中, 每个字符用16位表示,这叫一个代码单元;而辅助字符采用一对连续的代码单元进行编码;(干货——代码单元的定义,一个Unicode代码单元==16位==2个字节)5.4)这样构成的编码值:一定落入基本的多语言级别中空闲的2048字节内,通常被替代区域(U+D800~U+DBFF用于第一个代码单元,而U+DC00~U+DFFF用于第二个代码单元)。这样的设计十分巧妙,我们可以从中迅速知道一个代码单元是一个字符编码,还是一个辅助字符的第一或第二部分。看个Unicode字符的编码荔枝)对于整数集合的数学符号Z, 它的代码点是 U+1D56B,并且是用两个代码单元U+D835 和 U+DD6B 编码的;(具体参见 https://en.wikipedia.org/wiki/UTF-16)
【2】Unicode编码中的代码点和代码单元
package com.tomcat.test;public class UnicodeTest {public static void main1(String[] args) {String greeting = "hello";System.out.println(greeting.length()); // Unicode代码单元(码元)数量 // 5int codePointCount = greeting.codePointCount(0, greeting.length());System.out.println(codePointCount); //Unicode代码点数量 // 5char first = greeting.charAt(0);// 返回位置0的代码单元 // 'h'System.out.println(first);// 要想得到第i个代码点for (int i = 0; i < greeting.length(); i++) {int index = greeting.offsetByCodePoints(0, i);int codePoint = greeting.codePointAt(index);System.out.println("index = " + index + ", codePoint = " + codePoint + ", " + (char)codePoint);}/*** output* 55hindex = 0, cp = 104, hindex = 1, cp = 101, eindex = 2, cp = 108, lindex = 3, cp = 108, lindex = 4, cp = 111, o*/}public static void main2(String[] args) {String sentence = "\u1D56B is the set of integers";for (int i = 0; i < sentence.length();) {int codePoint = sentence.codePointAt(i);if(Character.isSupplementaryCodePoint(codePoint)) {i += 2;} else {i++;}System.out.println(codePoint + ", " + (char)codePoint);}}public static void main3(String...args){ char[] ch = Character.toChars(0x10400); System.out.printf("U+10400 高代理字符: %04x\n", (int)ch[0]);//d801 System.out.printf("U+10400 低代理字符: %04x\n", (int)ch[1]);//dc00 String str = new String(ch); System.out.println("代码单元长度: " + str.length());//2 System.out.println("代码点数量: " + str.codePointCount(0, str.length()));//1 System.out.println(str.codePointAt(0));//返回给定位置开始或结束的代码点,66560 System.out.println(str.charAt(1));//返回给定位置的代码单元,由于未定义,返回? //遍历一个字符串,打印出所有字符的代码点 str += "Hello,world!"; int i = 0; int cp = str.codePointAt(i); while(i < str.length()){ System.out.println(str.codePointAt(i) + ", " + (char)str.codePointAt(i)); if(Character.isSupplementaryCodePoint(cp)) i += 2;//如果cp所在的位置是代码点的第一部分,执行此处 else i++; } /* * 66560 * 72 * 108 * 111 * 119 * 114 * 100 */ }
}
char类型和Unicode编码相关推荐
- Java中char类型与Unicode编码
char是字符型,在Java中规定为2个字节.同样地,目前全球通用的字符集编码Unicode码,最常见的也是用2个字节表示字符. 其实,Java中可以通过字符型和整型的相互强制类型转换,实现由字符得出 ...
- char类型和varchar的区别和选用
一.先说结论 1.char的优点是存储空间固定,所以存储读取速度快.缺点是空间冗余,对于数据量大的表,非固定长度属性使用char字段,空间浪费. 2. varchar字段,存储的空间根据存储的内容变化 ...
- char*转LPCWSTR Unicode编码
在Windows编程中,经常会碰到字符串之间的转换,char*转LPCWSTR也是其中一个比较常见的转换.下面就列出几种比较常用的转换方法. 1.通过MultiByteToWideChar函数转换 M ...
- java char unicode_在Java的基本数据类型中,char型采用Unicode编码方案,每个Unicode码占用______字节内存空间,这样,无论是中文_搜题易...
下列程序的功能是:输入一个姓名,程序运行后,输出"姓名Welcome you!".例如,输出"张三Welcome you!".请在下面横线处填入正确的方法名,使 ...
- python的unicode编码表_python中Unicode编码初探
上一篇文章主要讨论了字符编码的不同方式,这一篇文章着重谈谈对python的编码解码的理解. python2 在python2中主要有两种类型的字符类型,一个是str,一个是Unicode.平时我们默认 ...
- 打包解包模块总结:VS2010中默认的编码是Unicode编码
我把vc6.0上运行没有问题的代码挪到vs2010上,出现了一系列问题. 其根本原因是两种编译器默认编码不一样,vc6.0中默认的编码是(多字节)Ascii编码,VS2010中默认的编码是Unicod ...
- Qt中文编码和QString类Unicode编码转换
1 window中文GBK编码和Unicode编码转换 //GBK‐> QString QString str = QString::fromLocal8Bit("新浪微博" ...
- 数据库中的字段varchar类型和char类型的区别?
数据库中的字段varchar类型和char类型的区别? 目录 数据库中的字段varchar类型和char类型的区别?
- python知识:json格式文本;异常处理;字符串处理;unicode类型和str类型转换
python知识:json格式文本:异常处理:字符串处理:unicode类型和str类型转换 参考文章: (1)python知识:json格式文本:异常处理:字符串处理:unicode类型和str类型 ...
最新文章
- 输入和输出移位寄存器的同步串行模式
- 带你了解加速度传感器的几种应用
- 局部敏感哈希-Locality Sensitive Hashing
- VMware虚拟机安装centos
- c++求区间第k大数_数组中求第K大数的实现方法
- hazelcast入门教程_Hazelcast入门指南第6部分
- 网页编程从入门到精通 杨凡_干货 | web前端入门基础知识
- 如何低成本实现Flutter富文本,看这一篇就够了!
- div css入门教程,更简洁CSS清理浮动方式:clearfix
- 王建宙:中国移动还未与苹果就iPhone达成协议
- typora字体颜色及字体背景颜色快捷方式(亲测实用有效)
- c语言中islower是什么函数,C语言islower函数介绍、示例和实现
- Atiitt 兼容性提升的艺术 attilax总结 目录 1. 兼容性产生的原因	2 1.1. Api变化	2 1.2. 需求的资源不满足	2 2. 兼容性的分类	2 2.1. Web方面的兼容性
- sql字符型注入-sqli第1关
- 姚锦云:再论庄子传播思想与接受主体性:回应尹连根教授
- 【嵌入式】MCU外接Flash图片数据存取实例
- 2010年下半年卷烟品牌目录
- uva 10019 Funny Encryption Method
- static变量的生存期问题
- [分享]ERP实施工程师笔试题目
热门文章
- 【CTSC2010】珠宝商【后缀自动机】【点分治】【根号分治】
- 2020牛客暑期多校训练营(第二场)Just Shuffle
- CF848C Goodbye Souvenir
- Product 1 Modulo N CodeForces - 1514C
- 模板:Miller-RabinPollard-Rho(数论)
- 最短路模板:dij,spfa与floyd
- P7962-[NOIP2021]方差【dp,差分】
- AT4120-[ARC096D]Sweet Alchemy【贪心,背包】
- nssl1446-小智的旅行【dp】
- ssl初一组周六模拟赛【2018.5.12】(期中)