【发布时间】:2014-12-22 09:43:46
【问题描述】:
我有一个 int (-> byte) 表示一个有效的 UTF-8 字符,我想在 System.out.println 中打印这个单个字符。
我知道这两种将表示 UTF-8 字节的 int 转换为单字符字符串的方法:
int myByte = ...; // For example 67
String sMyByte = String.valueOf((char)((byte)myByte & 0xFF)); // 67 will become "C"
String sMyByte = new String(new byte[]{ (byte)myByte }, StandardCharsets.UTF_8); // 67 will become "C"
两者似乎有点长/不可读,我想知道是否有更简单的方法将表示 UTF-8 字节的 int 转换为单字符字符串。如果不是,我可能会使用上述两个中的第一个。
【问题讨论】:
-
(byte)myByte & 0xFF中的& 0xFF是不必要的,至少有两个原因: 1. 你说过myByte包含一个有效的 UTF-8“字符”,根据定义意味着它不是超越0xFF;和 2.(byte)myByte已经被截断为 8 位。 -
“我有一个 int (-> byte) 代表一个有效的 UTF-8 字符” UTF-8 没有 有 个字符,它有代码单元,其中一些本身是无效的。 UTF-8 中的 字符 长度可以是 1 到 4 个字节。见:unicode.org/faq/utf_bom.html
标签: java string casting character byte