Unicode与String

Unicode介绍

Unicode

PUA

https://unicode-table.com/en/blocks/private-use-area/


String对应的数值数据是由char类型的数组进行保存的,一个char类型占据两个字节,其中char类型是用于存储utf-16格式的字符。

字符串表示采用UTF-16格式的字符串,参考官方说明:

String (Java Platform SE 7 )

字符串表示采用UTF-16格式的字符串,其中补充字符由代理项对表示(有关详细信息,请参阅字符类中的Unicode字符表示部分)。索引值指的是字符代码单位,因此补充字符在字符串中使用两个位置。

字符串类除了提供处理Unicode代码单元(即char值)的方法外,还提供了处理Unicode代码点(即字符)的方法。


String smile ="";//等价于String smile ="\uD83D\uDE00";

int codePC = smile.codePointCount(0,smile.length());//1

int code0 = smile.codePointAt(0);

String sCode0 = Integer.toHexString(code0);//1f600

Unicode数值U+1F600转换为utf-16格式后对应的编码值\uD83D\uDE00


3个Unicode单位长度的emoji

unicode.org/emoji

smile ="1️⃣";





String.length方法:返回的是多少个Unicode数目,一个Unicode占据两个字节,即一个char类型。


new String(Character.toChars(0xFB50));length为1,因为占据一个Unicode

new String(Character.toChars(0x1f439));length为2,因为占据两个Unicode



字符串传输过程:

1,A方发送String字符串,通过utf-8字符格式进行编码把utf-16格式的数据转换后变为字节数组发送

2,B方接受到该字节数组,通过public String(byte bytes[], String charsetName),可以通过utf-8格式把字节数组还原成utf-16格式的数据

你可能感兴趣的:(Unicode与String)