通用字符集(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位)表示。

参考链接


写在最后


这次的排版借鉴了维基百科的排版方式,前三次的笔记,每次排版都不太一样 XD

UCS、Unicode、UTF,越看越晕,越写越不知道在写什么。怎么写的和Java一点关系都没有啊!

发现好像可以用一句话直接总结:Java里的字符串就是由char类型序列,一个个的代码点表示的,大部分常用字符(基本多文种平面)的代码点使用一个代码单元(2字节),辅助字符则为一对代码单元(4字节)。

Java Core 学习笔记——3.char/Unicode/代码点/代码单元的更多相关文章

  1. java jvm学习笔记七(jar包的代码认证和签名)

    欢迎装载请说明出处:http://blog.csdn.net/yfqnihao 前言: 如果你循序渐进的看到这里,那么说明你的毅力提高了,jvm的很多东西都是比较抽像的,如果不找相对应的代码来辅助理解 ...

  2. Android(java)学习笔记128:使用proguard混淆android代码

    1.当前是有些工具比如apktool,dextojar等是可以对我们android安装包进行反编译,获得源码的.为了减少被别人破解,导致源码泄露,程序被别人盗取代码,等等.我们需要对代码进行混淆,an ...

  3. [原创]java WEB学习笔记66:Struts2 学习之路--Struts的CRUD操作( 查看 / 删除/ 添加) 使用 paramsPrepareParamsStack 重构代码 ,PrepareInterceptor拦截器,paramsPrepareParamsStack 拦截器栈

    本博客的目的:①总结自己的学习过程,相当于学习笔记 ②将自己的经验分享给大家,相互学习,互相交流,不可商用 内容难免出现问题,欢迎指正,交流,探讨,可以留言,也可以通过以下方式联系. 本人互联网技术爱 ...

  4. java多线程学习笔记——详细

    一.线程类  1.新建状态(New):新创建了一个线程对象.        2.就绪状态(Runnable):线程对象创建后,其他线程调用了该对象的start()方法.该状态的线程位于可运行线程池中, ...

  5. Android(java)学习笔记167:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  6. Java NIO学习笔记

    Java NIO学习笔记 一 基本概念 IO 是主存和外部设备 ( 硬盘.终端和网络等 ) 拷贝数据的过程. IO 是操作系统的底层功能实现,底层通过 I/O 指令进行完成. 所有语言运行时系统提供执 ...

  7. Android(java)学习笔记110:Java中操作文件的类介绍(File + IO流)

    1.File类:对硬盘上的文件和目录进行操作的类.    File类是文件和目录路径名抽象表现形式  构造函数:        1) File(String pathname)       Creat ...

  8. 尚学堂JAVA基础学习笔记

    目录 尚学堂JAVA基础学习笔记 写在前面 第1章 JAVA入门 第2章 数据类型和运算符 第3章 控制语句 第4章 Java面向对象基础 1. 面向对象基础 2. 面向对象的内存分析 3. 构造方法 ...

  9. Android(java)学习笔记160:Framework运行环境之 Android进程产生过程

    1.前面Android(java)学习笔记159提到Dalvik虚拟机启动初始化过程,就下来就是启动zygote进程: zygote进程是所有APK应用进程的父进程:每当执行一个Android应用程序 ...

随机推荐

  1. Myeclipse 自定义代码自动格式化(ctrl+alt+F)

    打开如图界面:preference->java->code style->formatter下的edit... 如设设置java代码多长换行:

  2. c# 网络是否连接

    c#  网络是否连接 方案一: using System; using System.Collections.Generic; using System.Linq; using System.Text ...

  3. J2EE开发之常用开源项目介绍

    主要就我所了解的J2EE开发的框架或开源项目做个介绍,可以根据需求选用适当的开源组件进行开发.主要还是以Spring为核心,也总结了一些以前web开发常用的开源工具和开源类库 1持久层: 1)Hibe ...

  4. django-based blog- mezzanine

    django-based blog- mezzanine zinnia 博客 hydra  暴力破解

  5. python 统计文本文件的行数

    num_lines = sum(1 for line in open(input_file_name))

  6. [ionic开源项目教程] - 第2讲 新建项目,配置app.js和controllers.js搭建基础视图

    新建项目 由项目功能架构图选择合适的页面架构,这里选用Tab,ionic新建项目,默认的模板就是tab. $ ionic start TongeNews Creating Ionic app in f ...

  7. HDU 1240 (简单三维广搜) Asteroids!

    给出一个三维的迷宫以及起点和终点,求能否到大终点,若果能输出最短步数 三维的问题无非就是变成了6个搜索方向 最后强调一下xyz的顺序,从输入数据来看,读入的顺序是map[z][x][y] 总之,这是很 ...

  8. checkbox美化;给div加上checked属性

    DIV的背景图修改 $("#isOpenmibao").css("backgroundImage", " url('../images/checkbo ...

  9. acdream 1686 梦醒(时钟重合)

    Problem Description 娜娜离开了这个王国,走向远方,在旷野上,娜娜看到了一个大时钟,上面的时针分针秒针都在缓缓转动,那只挥着翅膀的天使又出现了,天使说:“外面天已经亮了,娜娜你别睡过 ...

  10. android 中解析XML的方法(转)

    在XML解析和使用原始XML资源中都涉及过对XML的解析,之前使用的是 DOM4J和 XmlResourceParser 来解析的.本文中将使用XmlPullParser来解析,分别解析不同复杂度的t ...