有没有更好的方法将包含UTF-8字节代码的String转换为UTF-8字符串?

时间:2012-02-06 20:47:22

标签: java utf-8

我有一个包含"\u0627\u0644\u0628\u062d\u0631\u0649\u0646"的字符串。

我想转换为包含"البحرىن"的字符串。

我尝试过使用这种方法,但它不能达到我希望的效果:

protected String convertUtf(String input) throws CharacterCodingException {
   Charset charset = Charset.forName("UTF-8");
   CharsetDecoder decoder = charset.newDecoder();
   CharsetEncoder encoder = charset.newEncoder();
   ByteBuffer bbuf = encoder.encode(CharBuffer.wrap(input));
   CharBuffer cbuf = decoder.decode(bbuf);
   return cbuf.toString();
}

思想?

3 个答案:

答案 0 :(得分:3)

它是一回事。这两种形式是可以互换的。它只是在java代码中表示字符串的一种不同方式。 String对象是相同的。例如:

String s1 = "\u0627\u0644\u0628\u062d\u0631\u0649\u0646";
String s2 = "البحرىن";

System.out.println(s1.equals(s2)); //prints "true"

答案 1 :(得分:2)

要转换包含文字代码点的字符串(例如String s = "\\u0627[...]"),请参阅this question

答案 2 :(得分:1)

如果您有 literal 字符串“\ u0627 \ u0644 \ u0628 \ u0628 \ u0629 \ u0649 \ u0646”并想将其转换为正确的Unicode字符串,那么您必须进行解析/手工转换。您可以在String java.util.Properties#loadConvert (char[] in, int off, int len, char[] convtBuf)中找到相应的方法。因为它是private你不能从外面使用它,但必须复制它。