如何在Java中将UTF-8转换为unicode?

例如,在Emoji Char集中, U+1F601是“GRINNING FACE WITH SMILING EYES”的unicode值, \xF0\x9F\x98\x81是该字符的UTF-8字节值。

\xE2\x9D\xA4用于沉重的黑心,unicode是U+2764

所以我的问题是,如果我有一个带有值的字节数组(0xF0, 0x9F, 0x98, 0x81, 0xE2, 0x9D, 0xA4) ,那我怎么能把它转换成Unicode值呢?

对于上面的结果,我想要的是一个值为"1F601""2764"的String数组。

我知道我可以编写一个复杂的方法来完成这项工作,但我希望已经有一个库来完成这项工作。

所以我的问题是,如果我有一个带有值的字节数组(0xF0,0x9F,0x98,0x81),那么我如何将其转换为Unicode值?

只需调用指定数据和编码的String构造函数:

 String text = new String(bytes, "UTF-8"); 

您可以指定Charset而不是编码名称 – 我喜欢Guava的简单Charsets类,它允许您编写:

 String text = new String(bytes, Charsets.UTF_8); 

或者对于Java 7,使用StandardCharsets甚至不需要Guava:

 String text = new String(bytes, StandardCharsets.UTF_8); 

只需使用String类:

 byte[] bytesArray = new byte[10]; // array of bytes (0xF0, 0x9F, 0x98, 0x81) String string = new String(bytesArray, Charset.forName("UTF-8")); // covert byteArray System.out.println(string); // Test result 

以下是使用InputStreamReader的示例:

 InputStream inputStream = new FileInputStream("utf-8-text.txt"); Reader reader = new InputStreamReader(inputStream, Charset.forName("UTF-8")); int data = reader.read(); while(data != -1){ char theChar = (char) data; data = reader.read(); } reader.close(); 

参考: Java I18N示例