Как декодировать закодированные в shift-jis данные в XML-документе с помощью Cocoa (iPhone) - PullRequest
0 голосов
/ 31 августа 2009

У меня есть XML-документ, в котором может иметь данные, закодированные в shift-jis, и я пытаюсь проанализировать его с помощью объекта NSXMLParser.

Обычно я предполагаю, что документ закодирован в UTF8, и все хорошо - кто-нибудь знает, если / как я могу определить, закодирован ли элемент shift-jis и как его декодировать?

Спасибо

1 Ответ

1 голос
/ 31 августа 2009

XML-документ имеет кодировку UTF-8, если в нем нет декларации XML, в которой указано иное, например:

<?xml version="1.0" encoding="shift_jis"?>

или

<?xml version="1.0" encoding="cp932"?>

Любой анализатор XML должен определять кодировку, указанную в объявлении XML. (Некоторые синтаксические анализаторы могут не поддерживать некоторые кодеки CJK, поэтому будут жаловаться, но AIUI NSXMLParser должен подойти.)

Если у вас есть файл с последовательностями байтов Shift-JIS, который не имеет такой заявленной кодировки, или который содержит последовательности байтов Shift-JIS в одних элементах и ​​UTF-8 в других, то у вас нет формируется; это вообще не документ XML, и никакой парсер его не прочитает.

Если вы только что получили недостающее объявление кодировки, вам действительно нужно исправить его в исходном коде, но тем временем взломать подходящее объявление XML или транскодировать байт вручную из Shift-JIS в UTF-8, прежде чем вводить его в анализатор, должно помочь.

...