XML Кодирование содержимого базы данных с латинскими символами
-
05-10-2019 - |
Вопрос
У меня есть база данных ASP Access, которая содержит строки на различных европейских языках. База данных была заполнена до агентов в соответствующих странах. Он содержит записи с акцентированными символами и т. Д., как вы ожидаете. Если я открою базу данных с помощью MS Access, эти символы отображаются нормально. Например, немецкий эквивалент «Open» показывает как «Öffnen» (надеюсь, вы можете увидеть «O» с 2 точками над ним!).
У меня есть код ASP, который читает базу данных и возвращает записи в XML. Текст передан XMLENCODE, чтобы построить XML, но, по-видимому, только имеет дело с 5 специальностями, такими как «<», «&», и т. Д. Если я бросаю XML, акцентированные символы без изменений.
<English>Open</English>
<German>Öffnen</German>
Если я смотрю на необработанные пакеты с Wireshark, я вижу, что байт «Ö» является Hex D6, который, кажется, это десятичное значение Unicode и ISO 8859-1.
Проблема начинается, когда я пытаюсь разбирать XML в клиентской стороне js. Я получил:
"An invalid character was found in text content"
от IE. FF и Chrome Happy принимают XML без Hiccup, но браузер показывает символ «Ö» как алмаз с вопросительным знаком внутри.
http://www.validome.org/xml/validate/ сообщает «Ошибка кодирования».
http://www.w3schools.com/dom/dom_validate.asp. думает, что это нормально.
XML является закодированным UTF-8.
Что мне нужно сделать, чтобы иметь т.е. принимать мой XML без жалобы?
Что мне нужно сделать, чтобы браузеры правильно отобразить вещи?
Решение
Откуда вы знаете, что XML ITF-8 закодирован? Я не знаю, я ну не знаю, но в Java общая проблема - предположить, что просто пишет encoding="UTF-8"
Заголовок заставляет его быть кодированным UTF-8. Вы также должны настроить писатель, чтобы на самом деле написать UTF-8.
Вы сказали, что Wireshark показывает HEX D6, что указывало бы, что поток на самом деле не кодируется UTF-8, независимо от того, что говорит заголовок.
Другие советы
Ну, я не совсем уверен, но я смог его работать. По предложению комментариев Джима я изменил XML и ответить, кодируя назад с 8859-1 до UTF-8, а также кодировку в метаге «Мета» для страниц.
Теперь он работает без жалобы в IE, и браузеры теперь отображают правильные символы.
Я также проверил необработанные байты с Wireshark на этот раз, и символ «Ö» кодируется в XML в 2 байта (0xc3, 0x96), вместо 1 байта 0xD6.
Так что в итоге:
В сервере-стороне ASP-кода для генерации заголовка отклика XML:
return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;
В сервере на стороне ASP Code для создания самого ответа:
Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;
А в заголовке веб-страницы:
<head>
<meta http-equiv="Content-type" content="text/html; charset=UTF-8">
Большое спасибо Джим.