Base64 декодировать французские символы - PullRequest
1 голос
/ 26 января 2011

Мы получаем данные в кодировке base64 (XML) от третьих лиц.Если данные XML на английском языке, все работает нормально, я могу декодировать base64 и анализировать XML.Если в XML все французские символы в нижнем регистре, все работает нормально.Но если данные xml содержат французские символы в верхнем регистре (например, А), если я выполняю декодирование base64 и пытаюсь его проанализировать, анализатор завершается неудачно.Любые предложения о том, как решить эту проблему?

Спасибо.

Ответы [ 2 ]

3 голосов
/ 26 января 2011

Base64 - это метод для кодирования 8-битных двоичных данных с использованием 7-битных / US-ASCII-символов. После декодирования Base64 у вас должен быть стандартный файл XML. Возможно, этот XML-файл содержит недопустимые символы или неправильно указывает кодировку символов, которую он использует.

Вы упомянули À, специфичное для HTML (не XML) представление & Agrave ;. Если XML содержит строку в кодировке HTML À, в XML также должна быть ссылка на таблицу сущностей, указывающую, как декодировать эту строку.

В качестве альтернативы, если ваш XML содержит & Agrave; непосредственно символ, закодированный с использованием (например) набора символов ISO-8859-1, либо код XML должен указывать эту кодировку (<?xml version="1.0" encoding="ISO-8859-1"?>), либо вы должны указать его самостоятельно при декодировании. В противном случае синтаксический анализатор может предположить (например, кодирование UTF-8) и потерпит неудачу при попытке декодировать & Agrave;.

Точное сообщение об ошибке должно сказать вам, в чем проблема.

[обновление: & Agrave; непосредственно]: Похоже, что XML неверен; что они говорят UTF-8, но на самом деле используют другую кодировку. Проверьте байты XML (после декодирования base 64) для этого; если & Agrave; кодируется как один байт, это определенно не UTF-8.

[обновление: как исправить?] Если они неправильно указывают его в заголовке XML, им действительно следует заменить ложный заголовок (<?xml version="1.0" encoding="UTF-8"?>) на правильный (<?xml version="1.0" encoding="windows-1252"?>). Если они ничего не указывают, похоже, что функция iconv может быть вашим лучшим выбором. Мне это действительно не нужно, поэтому я не уверен на 100% в этом, но похоже, что вы можете использовать: $ data = iconv ("ISO-8859-1", "UTF-8", $ data) после base64_decode и перед строкой simplexml_load_string. Я не знаю, как указать кодировку напрямую при декодировании XML.

Я не очень разбираюсь в особенностях PHP кодировки символов, поэтому я не даю никаких гарантий ...

1 голос
/ 26 января 2011

Что такое кодировка символов XML?Возможно, это не UTF-8, и ваш анализатор пытается проанализировать строку XML как UTF-8.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...