Как получить настоящие символы из его исходного формата utf в Java - PullRequest
0 голосов
/ 17 июля 2010

У меня есть несколько китайских символов, закодированных так:

String b = "\\u91d1\\u5143\\u6bd4\\u8054\\u6210\\u957f\\u52a8\\u529b";

Как я могу изменить строку b на реальные символы, я обнаружил, что нижеприведенный символ c может быть показан при выводе его в консоль, тогда возникает вопрос, как изменить строку b на c?

String c = "\u91d1\u5143\u6bd4\u8054\u6210\u957f\u52a8\u529b";

Ответы [ 2 ]

1 голос
/ 18 июля 2010

Если строка действительно содержит двойные косые черты, вам придется вручную сканировать строку, декодируя и заменяя каждую последовательность "\ uXXXX" ее фактическим представлением UTF-16.Например (не проверено):

StringBuilder buf = new StringBuilder();
char c[2];
for (int i = 0; i < b.length(); i += 7)
{
  int tmp = Integer.parseInt(b.substring(i+3, i+7), 16);
  if (tmp < 0x1000)
  {
    c[0] = (char) tmp;
    c[1] = 0;
  }
  else
  {
    tmp -= 0x10000;
    c[0] = (0xD800 | ((tmp & 0xFFC00) >> 10));
    c[1] = (0xDC00 | (tmp & 0x3FF));
  }
  buf.append(c, 2);
}
b = buf.ToString();
0 голосов
/ 19 июля 2010

Кто-то опубликовал хитрое решение, но мне кажется, что это хорошо:

    b="abc="+b;
    Properties props = new Properties();
    props.load(new StringReader(b));
    b=props.getProperty("abc");
    System.out.println(b);
...