2013-07-08 3 views
2

Я пытаюсь проанализировать XML-файл, который был создан внутри моей компании. Предполагается, что файл будет кодироваться в кодировке UTF-16, но я получаю сообщение об ошибке с написанным мной сценарием Python (см. Ниже). Я пытаюсь выяснить, есть ли проблема с файлом или моим скриптом. Есть ли способ проверить кодировку? Все мои поиски завершились инструментами проверки XML или инструментами, которые проверяют корректно сформированный XML. Я надеялся попробовать XMLSpy, но в настоящее время у меня нет доступа к нему.Как проверить кодировку xml

Код, который бросает ошибку является «parser.parse» линия (Python 2.7):

from xml.sax import make_parser 
from xml.sax.handler import ContentHandler 
import codecs 

parser = make_parser() 
curHandler = XmlHandler() 
parser.setContentHandler(curHandler) 

parser.parse(codecs.open(infile, 'rb', fileEncoding)) 

где «входной_файл» является файл XML в вопрос и «fileEncoding» в данном случае является " UTF-16' .

Сценарий отлично работает в кодированных файлах UTF-8. Но с UTF 16-файлов я получаю следующее сообщение об ошибке:

xml.sax._exceptions.SAXParseException: XmlFile.xml:1:30: encoding specified in XML declaration is incorrect 

Мне очень жаль, но я не могу отправить XML. Это не сложно, но содержит слова/имена из нескольких зарубежных стран. Мое текущее подозрение в том, что кодировка UTF-8, но атрибут кодирования устанавливается в UTF-16. Есть ли способ проверить это?

ОБНОВЛЕНИЕ: ОК. Так что теперь я совершенно смущен. Я изменил кодировку в файле XML на UTF-8 вместо UTF-16, но забыл изменить его в скрипте. Скрипт работал так, как ожидалось. Таким образом, кодировка файла = 'UTF-8', но открыта с помощью:

работает как ожидалось, без ошибок.

Дополнительная информация: Я разрабатываю/выполняю в среде Win7/Server 2008.

ответ

1

Получить собственный редактор HEX (или написать программу для сброса первых восьми байтов входного файла).

  1. Ищите Byte order mark (BOM) в самом начале. Если это так, это ваша кодировка.
  2. В противном случае вы должны увидеть 0x3C (UTF-8), 0x003C (UTF-16) или, возможно, но unlikly, 0x0000003C (UTF-32) (открытие < characterd из XML пролога.
+0

Спасибо за ваш ответ. В спецификации отображается FF FE, поэтому я предполагаю, что кодировка UTF-16LE, но я пытаюсь выяснить, есть ли способ проверить правильность кодирования файла? – LVerwolf