java - 描绘超出字符范围

标签 java

当我运行以下语句时,

    System.out.println("Character is "+(char)65536); //equivalent to 0x10000

我得到的输出为

Character is 

如何描述它?

最佳答案

Character类提供了以下方法

Character.highSurrogate(codePoint);
Character.lowSurrogate(codePoint);

用于检索代理,给定代码点。

一旦有了这些,您就可以将它们写入 ByteBuffer 并获取相应的 byte[] 并使用它创建一个新的 String > 采用 UTF-16 编码。

//  byte[] bytes = new byte[] { (byte) 0xD8, 0x34, (byte) 0xDD, 0x1E };
String text = "𝄞"; // new String(bytes, StandardCharsets.UTF_16);
int codePoint = text.codePointAt(0);

ByteBuffer buf = ByteBuffer.allocate(4);
buf.putChar(Character.highSurrogate(codePoint));
buf.putChar(Character.lowSurrogate(codePoint));
byte[] data = buf.array();

// recreated
String rep = new String(data, StandardCharsets.UTF_16); 

关于java - 描绘超出字符范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26023898/

相关文章:

java - 单例并不是真正的单例

Java:我的新对象实例化正在更改以前的对象引用

java - 如何将 bean 保存(持久化、序列化)到磁盘并在下次 Spring 运行时恢复(反序列化)它们?

java - 使用 createBufferStrategy() 的正确方法是什么?

java - Android - 服务、MediaPlayer 和 setVolume

Java + MySQL -PreparedStatement 编码遇到问题

java - Selenium XPath - 如何查找紧邻前面的元素

java - 我们可以创建 hashmap 键单例吗?

java - 从 scala 异常获取参数

java - JSON 序列化对象的日期格式为 2006-10-04T19 :49:49. 无法对其进行反序列化