XML Кодирование содержимого базы данных с латинскими символами

StackOverflow https://stackoverflow.com/questions/2926642

Вопрос

У меня есть база данных 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"> 

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top