SAX Parser не распознает кодировку windows-1255 - PullRequest
1 голос
/ 29 марта 2012

Я работаю над анализатором rss в Android (обновление парсера я нашел в интернете). Из того, что я знаю, SAX Parser автоматически распознает кодировку из тега xml, но когда я пытаюсь разобрать канал, который объявляет кодировку windows-1255, он не анализирует его, а выдает и исключение. Я попробовал несколько вещей:

  1. final InputSource source = new InputSource(feed);
    Reader isr = new InputStreamReader(feed);
    source.setCharacterStream(isr);
    
  2. Я даже пытался сообщить ему конкретную кодировку.

    source.setEncoding("Windows-1255");
    
  3. Пытался посмотреть на локатор:

    @Override
    public void setDocumentLocator(Locator locator) {
    }
    

И он распознает кодировку как UTF-16.

Пожалуйста, помогите мне решить эту досадную проблему! Извините за беспорядок с фрагментами кода, кнопка кода по какой-то причине отказывается работать.

Ответы [ 2 ]

2 голосов
/ 29 марта 2012

Скорее всего, сама платформа не знает о кодировке "windows-1255".В конце концов, это кодировка на основе Windows - я бы не хотел, чтобы полагался на то, что она будет доступна на любых других платформах, особенно мобильных, где вещи обычно сокращаются до обязательных параметров.

1 голос
/ 30 марта 2012

Вам необходимо установить кодировку для InputStreamReader.

Reader isr = new InputStreamReader(feed, "windows-1255");
final InputSource source = new InputSource(isr);

From javadoc логика чтения из InputSource выглядит примерно так:

  • Есть ли поток символов? если есть, используйте это (это то, что происходит, если вы используете Reader, такой как InputStreamReader)

В противном случае:

  • Нет потока символов? Используйте поток байтов. (InputStream)
  • Есть ли кодировка для InputSource? Используйте это
  • Кодировка не была установлена? Попробуйте разобрать кодировку из xml-файла
...