ucs-4字符'‘的unicode值为0001f923,在intelliJ IDEA中将其复制到java代码时自动更改为相应的\uD83E\uDD23值。
Java只支持ucs-2,所以会发生从ucs-4到ucs-2的转换.
我想知道这个转变的逻辑,但是没有找到任何关于它的材料。
发布于 2019-09-16 10:11:00
U+010000 to U+10FFFF
现在具有输入代码点\U1F923:
Programming:
public static void main(String[] args) {
int input = 0x1f923;
int x = input - 0x10000;
int highTenBits = x >> 10;
int lowTenBits = x & ((1 << 10) - 1);
int high = highTenBits + 0xd800;
int low = lowTenBits + 0xdc00;
System.out.println(String.format("[%x][%x]", high, low));
}发布于 2019-09-16 11:27:00
尽管String将Unicode包含为一个char数组,其中char是一个2字节的UTF-16BE编码,但也支持UCS4。
UCS4: UTF-32,“代码点”:
Unicode代码点( UCS4 )在java中表示为int。
int[] ucs4 = new int[] {0x0001_f923};
String s = new String(ucs4, 0, ucs4.length);
ucs4 = s.codePoints().toArray();有编码,转换,代码点的UTF-16和UTF-8,需要更长的序列分别为2字节或1字节值.选择编码时,2/1字节值将与任何其他值不同。这意味着这样的值不会错误地匹配"/"或任何其他字符串搜索。这是通过从1...开始的高比特实现的,然后是大端格式的代码点(最重要的第一位)。
而不是搜索UCS4和UCS2,搜索UTF-16将产生有关所使用算法的信息。
https://stackoverflow.com/questions/57954090
复制相似问题