utf-8 в строку получает дополнительные добавленные символы - PullRequest
0 голосов
/ 05 октября 2018

IN ANDROID

Когда я получаю результат utf-8 от сервера, и я беру вывод сервера в строку, что происходит, я получаю дополнительные escape-символы, добавленные в строку.

В коде, что происходит,

String unicodeMessage =  "\u09aa\u09cd\u09b0\u099c\"; //this is how I want it

String unicodeMessage = "\\u09aa\\u09cd\\u09b0\\u099c\\"; // this is what happens

Я пытался использовать метод байтов, упомянутый в предыдущих постах, но он не работает

byte[] bytes = unicodeMessage.getBytes("UTF-8");
answer = new String(bytes, "UTF-8");

Я получаютот же вывод, что и входная строка.

Есть ли способ удалить добавленные escape-символы?

 String bengali = "\\u09aa\\u09cd\\u09b0\\u099c\\u099c"; //this is the input 

//\u09aa\u09cd\u09b0\u099c\u099c is the output i get when i print bengali and use replace("\\\\","\\"); 

 //প্রজজ is the expected output when input = "\u09aa\u09cd\u09b0\u099c\u099c"

 // u09aau09cdu09b0u099cu099c output when i use replace("\\","")

1 Ответ

0 голосов
/ 05 октября 2018

В единственной строке Unicode, такой как \u09aa, есть шестнадцатеричное значение символа (09aa = 2474 в десятичном виде), экранированное с помощью \u.Таким образом, вам нужно проанализировать эти значения и преобразовать их в настоящий символ Юникода.Ниже приведена функция для этого:

public static String getRealUnicodeString(String unicodeInput) {
    Pattern pattern = Pattern.compile("\\\\u([0-9a-fA-F]+)");
    Matcher m = pattern.matcher(unicodeInput);
    while (m.find()) {
        String unicodeChar = m.group(1);
        unicodeInput = unicodeInput.replaceAll("\\\\u" + unicodeChar, String.valueOf((char) Integer.parseInt(unicodeChar, 16)));
    }
    return unicodeInput;
}

А затем используйте ее:

System.out.println(getRealUnicodeString("\\u09aa\\u09cd\\u09b0\\u099c\\u099c \n StackoveFlow"));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...