XML-кодирование содержимого базы данных латинскими символами - PullRequest
2 голосов
/ 28 мая 2010

У меня есть база данных ASP Access, которая содержит строки на разных европейских языках. База данных ранее заполнялась агентами в соответствующих странах. Он содержит записи с акцентированными и т. Д. Символами, как и следовало ожидать. Если я открою базу данных с помощью MS Access, эти символы появятся нормально. Например, немецкий эквивалент «Open» отображается как «Öffnen» (надеюсь, вы можете увидеть «O» с 2 точками над ним!).

У меня есть ASP-код, который читает базу данных и возвращает записи в формате XML. Текст передается в XMLEncode для создания XML, но кажется, что он имеет дело только с 5 специальными элементами, такими как «<», «&» и т. Д. Если я дам дамп XML, акцентированные символы не изменятся. </p>

<English>Open</English>
<German>Öffnen</German> 

Если я посмотрю на необработанные пакеты с помощью Wireshark, то увижу, что байт "Ö" - это шестнадцатеричный D6, который представляется десятичным Unicode и значением ISO 8859-1.

Проблема начинается, когда я пытаюсь проанализировать XML в JS на стороне клиента. Я получаю:

"An invalid character was found in text content"

от IE. FF и Chrome с радостью принимают XML без проблем, но браузер показывает символ «…» в виде ромба с вопросительным знаком внутри.

http://www.validome.org/xml/validate/ сообщает об «ошибке кодирования».

http://www.w3schools.com/dom/dom_validate.asp считает, что все в порядке.

XML имеет кодировку UTF-8.

Что мне нужно сделать, чтобы IE принял мой XML без жалоб?

Что мне нужно сделать, чтобы браузеры правильно отображали материал?

Ответы [ 2 ]

1 голос
/ 29 мая 2010

Откуда вы знаете, что XML кодируется в UTF-8? Я не очень хорошо знаю среду MS, но в Java распространенной проблемой является допущение, что простое написание заголовка encoding="UTF-8" приводит к его кодировке UTF-8. Вы также должны настроить устройство записи так, чтобы оно действительно записывало UTF-8.

Вы сказали, что Wireshark показывает шестнадцатеричный D6, что указывает на то, что поток фактически НЕ кодируется в UTF-8, независимо от того, что говорит заголовок.

0 голосов
/ 29 мая 2010

Ну, я не совсем уверен, почему, но я смог заставить его работать. В ответ на комментарии Джима я изменил кодировку XML и ответов с 8859-1 на UTF-8, а также кодировку в теге META для страниц.

Теперь он работает без жалоб в IE, и браузеры теперь отображают правильные символы.

На этот раз я также проверил необработанные байты с помощью Wireshark, и символ «…» кодируется в XML как 2 байта (0xC3, 0x96) вместо 1 байта 0xD6.

Итак, в итоге:

В ASP-коде на стороне сервера для создания заголовка ответа XML:

return ("<?xml version=\"1.0\" encoding=\"UTF-8\"?>") ;

В ASP-коде на стороне сервера для генерации самого ответа:

Response.ContentType = "text/xml; charset=UTF-8" ;
Response.Write (XMLResponse) ;

и в заголовке веб-страницы:

<head>
  <meta http-equiv="Content-type" content="text/html; charset=UTF-8"> 

Большое спасибо, Джим.

...