Java学习笔记6 - Unicode编码与UTF-16

本文详细介绍了Unicode编码方案,特别是UTF-16编码方法,包括如何表示基本多语言平面(BMP)和增补字符集。在Java中,UTF-16被广泛使用,但单个char无法表示增补字符,需要一对char来表示。String类的API如length()、charAt()、codePointAt()等方法在处理UTF-16编码时有特定的行为,特别是对于增补字符的处理。
摘要由CSDN通过智能技术生成

一、UTF-16编码方法

Unicode是国际组织制定的可以容纳世界上所有文字和符号的字符编码方案。Unicode用数值0x000000-0x10FFFF来映射这些字符,最多可以容纳1114112个字符,或者说有1114112个代码点(code point)。代码点就是字符对应数值加上前缀U+,如U+0041就是字母A的代码点。UTF-8、UTF-16、UTF-32都是将数字转换到程序数据的转换格式。

1 代码点在U+0000到U+FFFF(注意U+D800到U+DBFF无定义)之间的字符(也叫做BMP, Basic Multilingual Plane),直接用两个字节表示。

2 代码点在U+10000到U+10FFFF(共有0xFFFFF个字符)之间的字符(也叫做增补字符集, supplementary characters),需要用四个字节表示。

  前两个字节的范围是U+D800到U+DBFF(也叫高代理项, high-surrogates range),

  后两个字节的范围是U+DC00到U+DFFF(也叫低代理项, low-surrogates range)。

  转换方式如下:

  2.1 将代码点对应数值减去0x10000,结果范围0x0000到0xFFFFF。

  2.2 将结果的高10bit与0xD800做逻辑或运算,低10bit与0xDC00做逻辑或运算,

  2.3 将两部分组合起来就是该字符值的UTF-16编码。

3 根据存储顺序的不同,UTF-16分为UTF-16LE和UTF-16BE,Windows和Linux一般使用UTF-16LE,而苹果操作系统使用UTF-16BE。

二、Java中的UTF-16

0 在JDK1.5之后Java才开始支持增补字符集,由JSR 204(Unicode Supplementary Character Support)实现。

1 Java中使用char(两个字节)作为表示字符的代码单元(code unit)。因此,Java中单个char是无法表示增补字符的,而且位于U+D800到U+DBFF和U+DC00到U+DFFF的char被视为无定义字符。

2 在Jav

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值