Мы анализируем xml-файл, содержащий информацию о пользователе, такую как имя, возраст и т. Д. Но пользователи со всего мира нуждаются в различном наборе символов в xml. Например, есть пользователь с именем «Sikl ¢ si». Если я устанавливаю xml-кодировку UTF-8, объект C# xmldocument генерирует исключение при загрузке xml. Я изменил кодировку на iso-8859-9, теперь она работает. Но, если у нас есть еще несколько забавных символов, которые не покрываются iso-8859-9, это снова будет проблемой. Каково окончательное решение этой проблемы.Xml-кодировка для многонационального решения
ответ
Сделайте это UTF-32, который будет охватывать большинство из них. Для получения дополнительной информации о UTF посетите this.
Конечным решением является знать, какая кодировка была использована для кодирования файла в первую очередь. XML-файл должен указать, какую кодировку он использует в декларации XML (например, <?xml charset="UTF-8" ?>
). Если это не так, то документ должен быть UTF-8 или UTF-16 (и различие между ними может быть обнаружено автоматически).
Ваш анализатор XML должен обрабатывать кодирование прозрачно на основе информации в XML-файле.
Если вы получаете документы, которые не будут анализировать, то вероятность того, что проблема заключается в том, как они генерируются в первую очередь. Вы должны отклонить их и сообщить отправителю исправить кодировку.
(Обратите внимание, что любая кодировка Юникода может обрабатывать практически любой символ, который вам может понадобиться (а также огромное количество вас нет). Проблема заключается в том, что документ не UTF-8, а не UTF -8 не может обрабатывать используемые символы).
На самом деле, мы генерируем xml-файлы из базы данных. Таким образом, нет информации о кодировке, которая требуется для пользователя. Я не знаю что делать. – londondev
Преобразуйте все данные в базу данных в UTF-8 и убедитесь, что все, что его модифицирует, также поддерживает UTF-8. Вероятно, вам придется много ручных проверок, когда вы пытаетесь восстановиться из текущего сломанного состояния. – Quentin
Нет, он не работает. Думаю, XmlDocument не знает UTF-32. Он дает сообщение об ошибке на корневом уровне: данные на корневом уровне недопустимы. Строка 1, позиция 40 – londondev
UTF-32 будет охватывать все возможные символы, которые могут вам понадобиться, но так же будут UTF-16 и UTF-8. Нет причин, по которым UTF-32 будет работать, и UTF-8 не будет. – svick