Unescape и конвертировать строковое кодирование - PullRequest
3 голосов
/ 06 февраля 2012

Я должен проанализировать строку в объект Date в Java.Строка, которую я получаю по шаблону MMM d yyyy HH:mm:ss z с языковым стандартом, установленным на French.

Проблема возникает, когда дата в феврале, августе или декабре из-за кодирования французских акцентов.Например, я получаю déc. 15 2011 16:55:38 CET за 15 декабря 2011 года.

Я не могу изменить способ создания строки, поэтому мне приходится иметь дело с плохим кодированием на моей стороне.Кажется, что когда сгенерированная строка плохо закодирована (содержимое UTF-8, закодированное как ISO 8859-1), тогда escapde.

Сейчас я использую:

stringFromXML = stringFromXML.replaceAll("é", "é");
stringFromXML = stringFromXML.replaceAll("û", "û");

Это работает, потому что толькоакцент во французском месяце é и û, но есть ли более чистый способ удалить и преобразовать символы?

Ответы [ 3 ]

10 голосов
/ 06 февраля 2012

Вам нужно два шага:

  1. Разрешить числовые ссылки на символы, например, используя StringEscapeUtils, как предложил Энди:

    String unescaped = StringEscapeUtils.unescapeHtml(in);
    
  2. Исправить кодировку, обрабатывая символы как единицы кода UTF-8:

    String out = new String(unescaped.getBytes("ISO-8859-1"), "UTF-8");
    
2 голосов
/ 05 апреля 2016

На всякий случай, если кто-то еще ищет такое же решение, как и я. Я пытался декодировать символы, которые я получил из запросов okhttp (Android), таких как: Ã до Ã

Так, как предложил @axtavt, я использовал StringEscapeUtils, но для этого я добавил эту зависимость в свой gradle:

compile 'org.apache.commons:commons-lang3:3.4'

И исправлены проблемы с персонажами

return StringEscapeUtils.unescapeHtml3(word);        
2 голосов
/ 06 февраля 2012

Вы можете использовать Apache Commons StringEscapeUtils, чтобы сделать это, если вы не возражаете против этой зависимости.

Из JavaDoc для StringEscapeUtils.unescapeHtml :

Отключает строку, содержащую сущность, в строку, содержащую фактические символы Юникода, соответствующие escape-символам. опоры HTML 4.0 лица.

Например, строка "& lt; Fran & ccedil; ais & gt;" станет ""

Он также должен работать с числовыми объектами, как у вас на входе.

...