Java Core 学习笔记——3.char/Unicode/代码点/代码单元
通用字符集(UCS)
UCS是由ISO制定的ISO 10646(或称ISO/IEC 10646)标准所制定的标准字符集。
UCS包括了其他所有的字符集(包含了已知语言的所以字符)。
ISO/IEC 10646定义了一个31位的字符集(首位恒定为0,占用4字节)。
Unicode(万国码、国际码、统一码、单一码)
编码方式:
Unicode编码空间从“U+0000”到“U+10FFFF”(共1112064个码位),Unicode的编码空间划为17个平面,每个平面包含216(65536)个码位。17个平面码位可表示为“U+xx0000”到“U+xxFFFF”(xx表示十六进制从 0016到1016,共计17个平面)。第一个平面称为基本多文种平面,其他平面为辅助平面。
Unicode目前实际应用的版本对应于UCS-2,使用16位的编码空间(占用2字节,最多可表示216=65536个字符),但当前版本并未完全使用这16位编码,仍保留了大量空间以作为特殊使用或将来扩展。
上述16位Unicode字符构成了基本多文种平面(属于UCS级别3,简称BMP,又称“零号平面”)。最新(未实际广泛使用)的Unicode版本又定义了16个辅助平面,共占用4字节编码空间,与UCS-4(未来版本将会达到,UCS-4为31位字符集,加上首位恒为0,共占32位,4字节,最多可表示231个字符)一致。
基本多文种平面的字符的编码为“U+hhhh”(h为一个十六进制数字),与UCS-2编码完全相同。同一字符UCS-2对应的UCS-4编码后两字节相同,前两字节均为0。
实现方式(UTF):
在不同平台上,为了节省空间,Unicode编码的实现方式不同。
例如,对一个仅含基本7位ASCⅡ字符的Unicode文件,如果每个字符以2字节的原Unicode编码方式传输将浪费巨大空间。对于这种情况,可以采用UTF-8编码(占用一个字节,后7位为原ASCⅡ编码,首位补0)。对于ASCⅡ与其他Unicode字符混混的情况,将通过算法转换,每个字符使用1-4个字节编码。
代码点/代码单元(JDK 5.0)
代码点(code point)是指与一个编码表中的某个字符对应的代码值(Unicode编码方式)。
Java中,char类型用UTF-16编码描述一个代码单元(code unit)。
UTF-16采用不同长度的编码表示所有的Unicode代码点。在基本多文种平面,每个字符用16位表示(通常称为一个代码单元);辅助字符采用一对连续的代码单元(32位)表示。
参考链接
- Unicode:http://zh.wikipedia.org/wiki/Unicode
- UCS:http://zh.wikipedia.org/wiki/%E9%80%9A%E7%94%A8%E5%AD%97%E7%AC%A6%E9%9B%86
- UTF-16:http://zh.wikipedia.org/wiki/UTF-16
写在最后
这次的排版借鉴了维基百科的排版方式,前三次的笔记,每次排版都不太一样 XD
UCS、Unicode、UTF,越看越晕,越写越不知道在写什么。怎么写的和Java一点关系都没有啊!
发现好像可以用一句话直接总结:Java里的字符串就是由char类型序列,一个个的代码点表示的,大部分常用字符(基本多文种平面)的代码点使用一个代码单元(2字节),辅助字符则为一对代码单元(4字节)。
Java Core 学习笔记——3.char/Unicode/代码点/代码单元的更多相关文章
- java jvm学习笔记七(jar包的代码认证和签名)
欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...
- Android(java)学习笔记128:使用proguard混淆android代码
1.当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的.为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等.我们需要对代码进行混淆,an ...
- [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈
本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...
- java多线程学习笔记——详细
一.线程类 1.新建状态(New):新创建了一个线程对象. 2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...
- Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- Java NIO学习笔记
Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...
- Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)
1.File类:对硬盘上的文件和目录进行操作的类. File类是文件和目录路径名抽象表现形式 构造函数: 1) File(String pathname) Creat ...
- 尚学堂JAVA基础学习笔记
目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...
- Android(java)学习笔记160:Framework运行环境之 Android进程产生过程
1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...
随机推荐
- Android eclipse中程序调试
一:断点调试 用eclipse开发android程序的时,跟VS一样是可以断点单步调试的.步骤如下.1 设置断点:在编码窗体的左边框上用鼠标双击,或者右键点击菜单,选择 Toggle Breakpoi ...
- SQL高性能查询优化语句
1.应尽量避免在 where 子句中对字段进行 null 值判断,否则将导致引擎放弃使用索引而进行全表扫描,如: select id from t where num is null可以在num上设置 ...
- android-HttpClient上传信息(包括图片)到服务端
需要下载apache公司下的HttpComponents项目下的HTTPCLIENT ----------地址为http://hc.apache.org/downloads.cgi 主要是用到了htt ...
- VIM的配置文件(vimrc)在哪里?【Win7】
如果你使用VIM有一段时间的话,你会想要修改它的一些配置,例如默认显示行号.在哪改呢? 答案是:vimrc 那这个配置文件在哪呢? 打开你的vi,在命令模式下,输入[:version],会看到如下图所 ...
- 使用Jenkins构建持续集成环境
简介 Jenkins是一个开源的持续集成工具,提供了数百种插件供用户选择,能够完成整套持续集成环境的构建. 它具有如下的特点: 持续集成和持续发布 作为可扩展的自动服务器,Jenkins可以作为简单的 ...
- laravel重要概念和知识点
Service Provider: 一个laravel service provider就是一个注册IoC container binding的类.实际上,laravel本身就自包含了一堆管理核心框架 ...
- c#中获取服务器IP,客户端IP以及Request.ServerVariables详细说明
客户端ip: Request.ServerVariables.Get("Remote_Addr").ToString(); 客户端主机名: Request.ServerVaria ...
- UISlide
UISlide属性 1. minimumValue : 当值可以改变时,滑块可以滑动到最小位置的值,默认为0.0 _slider.minimumValue = 10.0; 2. maxi ...
- js的for in具有不适应性(转)
js中for in 可以遍历对象或数组的显性属性,也就是说我们自己定义的属性是可以遍历的,那些原型上默认已有的属性,例如:Object.prototype.toString.Object.protot ...
- Android app 别用中文名
/************************************************************************* * Android app 别用中文名 * 说明: ...