Есть ли лучший способ преобразовать строку, содержащую байт-код UTF-8, в строку UTF-8? - PullRequest
0 голосов
/ 07 февраля 2012

У меня есть строка, содержащая "\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 ]

3 голосов
/ 07 февраля 2012

Это то же самое.Две формы взаимозаменяемы.Это просто другой способ представления строки в коде Java.Объект String такой же.Например:

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

System.out.println(s1.equals(s2)); //prints "true"
2 голосов
/ 07 февраля 2012

Для преобразования строки с буквальными кодовыми точками (например, String s = "\\u0627[...]") см. этот вопрос .

1 голос
/ 07 февраля 2012

Если у вас есть литерал String "\ u0627 \ u0644 \ u0628 \ u062d \ u0631 \ u0649 \ u0646" и вы хотите преобразовать его в правильную строку Unicode, тогда вам нужно выполнить синтаксический анализ / преобразование рукой. Вы можете найти метод для этого в String java.util.Properties#loadConvert (char[] in, int off, int len, char[] convtBuf). Поскольку это private, вы не можете использовать его извне, но вы должны скопировать его.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...