2015-03-06 8 views
2

У меня есть приложение, которое получает som Strings by JSON.Преобразование ASCII-представления unicode в unicode

Проблема в том, что я думаю, что они отправляют ее как ASCII, и текст действительно должен быть в юникоде.

Например, есть части строки, которая является «\ u00f6», который является шведское буквой «О»

Например шведское слово «купить» является «Копа» и строка, я получаю "k \ u00f6pa"

Есть ли простой способ для меня после того, как я получил эту строку в java, чтобы преобразовать ее в правильное представление?

То есть, я хочу, чтобы преобразовать строки, как «к \ u00f6pa» на «Копа»

Спасибо за всю помощь!

+0

Пожалуйста, обратитесь к [просить], чтобы помочь вам немного сформулировать вопрос и получить лучшие ответы – ochi

+0

Это ответы в http://stackoverflow.com/a/14368185/1100158 – ccarton

+2

Вы пишете свой собственный JSON парсер или это библиотека, которую вы используете неправильно? Почему, по-вашему, текст должен содержать символы Unicode? Unicode escape-последовательности действительны в строках JSON. – xehpuk

ответ

1

Ну, это достаточно просто, просто используйте библиотеку JSON. С Джексоном, например, вы:

final ObjectMapper mapper = new ObjectMapper(); 

final JsonNode node = mapper.readTree(your, source, here); 

JsonNode будет на самом деле быть TextNode; вы можете просто получить текст как:

node.textValue() 

Обратите внимание, что это не является «ASCII представление» из строки; просто случается, что строки JSON могут содержать символы символа кода UTF-16, подобные этому.

(вы потеряете кавычки вокруг значения, хотя, но это, вероятно, что вы ожидаете в любом случае)

0

шестнадцатеричный код всего 2 байта целое, которым int может обрабатывать просто отлично - так что вы может просто использовать Integer.parse(s, 16), где s - это строка без префикса "\u". Затем вы просто ограничиваете это int до char, что гарантированно подойдет.

Выполните некоторые регулярные выражения (чтобы проверить строку, а также извлечь шестнадцатеричный код), и все готово.

Pattern p = Pattern.compile("\\\\u([0-9a-fA-F]{4})"); 
Matcher m = p.matcher(arg); 
if (m.matches()) { 
    String code = m.group(1); 
    int i = Integer.parseInt(code, 16); 
    char c = (char) i; 
    System.out.println(c); 
} 
Смежные вопросы