2014-04-30 5 views
0

У меня есть текстовые строки, которые мне нужно обрабатывать, и внутри строк есть специальные символы HTML. Например:Как unescape html специальных символов в Java?

10����������������10������������������ 

Я хотел бы преобразовать эти символы в utf-8.

Я использовал org.apache.commons.lang3.StringEscapeUtils.unescapeHtml4, но не повезло. Есть ли простой способ справиться с этой проблемой?

+0

W шляпа, вы имеете в виду «не повезло»? Каков был результат? –

+0

Те же самые точные символы были возвращены, ни один из специальных символов html не был отменен – user3084207

+0

Возможно, вам придется свернуть собственный переводчик. Конкретная часть - это NumericEntityUnescaper в пакете Apache Commons. Существуют рецепты для создания собственного переводчика на своем сайте. –

ответ

3

В библиотеке Apache commons-lang есть класс StringEscapeUtils, который имеет полезный метод unescapeHtml().

String utf8Str = StringEscapeUtils.unescapeHtml(htmlStr); 

Вам также может понадобиться unescapeXml()

+0

Я уже пробовал использовать эту библиотеку, специальные символы не были отменены. – user3084207

+1

Попробуйте 'unescapeXml()' слишком – Bohemian

+0

@Bohemian Большое спасибо! Вот как я сохранил '' 'литерал в строках. – msanford

0

код @Bohemian корректен, это работает для меня, ваша не-кодированной строки 1010.

Теперь я добавляю еще один ответ вместо комментирования ответа богемный, потому что есть две вещи, которые все еще должны быть упомянуты:

  1. Я копировать-вставить вашу строку в HTML-код и браузер не может повторно или правильно, потому что ваша строка неправильно закодирована, т.е. е. строка кодирует высокий суррогат и низкий для двухбайтовых символов отдельно, а не кодирует всю кодовую точку (кажется, исходная строка - это кодированная строка UTF-16, возможно, строка Java?).

  2. Вы хотите, чтобы строка была перекодирована в UTF-8.

После того, как вы ваш Струнный Unencoded на StringEscapeUtils.unescapeHtml(htmlStr) (который не-кодирует строку успешно, несмотря на кодируются неправильно), это не имеет особого смысла говорить о «строковых кодировок», как Java строки «не знают» о кодировок. (они используют UTF-16 внутри, хотя).

Если вам нужна группа байтов, содержащих UTF-8 закодированный «строка», вы должны получить «сырые» байты из строки в кодировке UTF-8:

String javaStr = StringEscapeUtils.unescapeHtml(htmlStr); 
byte[] rawUft8String = javaStr.getBytes("UTF-8"); 

И делать с такими байтовый массив, что вам нужно.

Теперь, если вам нужно написать строку с кодировкой UTF-8 в файл, вместо этого массива байтов вам нужно указать кодировку при создании правильного java.io.Writer.

Попробуйте этот код не-кодировать строку (изменить путь к файлу первым), а затем откройте полученный файл в любом редакторе, который поддерживает UTF-8:

java.io.Writer подход (лучше):

public static void main(String[] args) throws IOException { 

    String str = "10����������������10������������������"; 

    String javaString = StringEscapeUtils.unescapeHtml(str); 

    try(Writer output = new OutputStreamWriter(
      new FileOutputStream("/path/to/testing.txt"), "UTF-8")) { 
     output.write(javaString); 
    } 
} 

java.io.OutputStream подход (если у вас уже есть "сырая" строка):

public static void main(String[] args) throws IOException { 

    String str = "10����������������10������������������"; 

    String javaString = StringEscapeUtils.unescapeHtml(str); 

    try(OutputStream output = new FileOutputStream("/path/to/testing.txt")) { 
     for (byte b : javaString.getBytes(Charset.forName("UTF-8"))) { 
      output.write(b); 
     } 
    } 

} 
Смежные вопросы