Разбор ISO-8859-1 с NSXmlParser - PullRequest
       13

Разбор ISO-8859-1 с NSXmlParser

3 голосов
/ 21 марта 2010

Я использую nsxmlparser и мне интересно, как я могу правильно разобрать ISO-8859-1 в строку NSString.

В настоящее время я получаю результаты с двухбайтовыми символами.

Используемый мной (не созданный мной) XML-файл начинается с <?xml version="1.0" encoding="ISO-8859-1"?>

Вот основные вызовы, которые я использую (опущены вызовы NSThread).

NSString *xmlFilePath = [[NSBundle mainBundle] pathForResource:sampleFileName ofType:@"xml"];

NSString *xmlFileContents = [NSString stringWithContentsOfFile:xmlFilePath encoding:NSUTF8StringEncoding error:nil];

NSData *data = [xmlFileContents dataUsingEncoding:NSUTF8StringEncoding];

NSXMLParser *parser = [[NSXMLParser alloc] initWithData:data];

[parser setDelegate:self];

[parser parse];

Ответы [ 2 ]

3 голосов
/ 21 марта 2010

Спецификация XML рекомендует явное объявление кодировки символов в прологе документа. Ваш входной документ, вероятно, имеет один; это скажет вам кодировку, которую анализатор должен использовать для интерпретации ввода символов.

В отсутствие явного объявления в том же разделе говорится, что обрабатывает ввод как UTF-8 или UTF-16 (и документ содержит ошибку, если он оказывается не закодирован как из них).

Итак, если ваш синтаксический анализатор XML либо игнорирует явное объявление кодировки, либо использует неправильную кодировку, если явного объявления нет, ваш синтаксический анализатор - Doing It Wrong ™, и его необходимо исправить, чтобы соответствовать спецификации XML.

0 голосов
/ 22 марта 2010

Похоже, что ваш заголовок считает, что это ISO-8859-1, а из-за поведения (заканчивающегося двумя символами вместо одного) кажется, что по крайней мере часть вашего контента уже UTF-8. Это похоже на классическую «проблему двойного кодирования utf-8», когда контент, уже закодированный как UTF-8, снова кодируется как UTF-8. Измените заголовок на UTF-8, и он может начать работать. Вы можете всегда пытаться выполнить свой код как UTF-8, а затем как он говорит (поскольку, если это не UTF-8, вы получите ошибку синтаксического анализатора).

Наконец, обратите внимание, что кодировка XML-файла переопределяется заголовком HTTP, если он подается через HTTP.

Не уверен, относится ли это к вашим потребностям, но мне нравится эта статья о анализе XML любой ценой . В качестве примера я укажу, что мне также нравится feedparser (Python) как лучший XML-анализатор XML любой ценой (отлично подходит для идей, но не для вашей ситуации).

...