2010-05-28 41 views
2

我有一个ASP Access数据库,其中包含各种欧洲语言的字符串。数据库之前由各个国家的代理人填写。它包含带有重音等字符的条目,如您所期望的那样。如果我用MS Access打开数据库,这些字符显示正常。例如,德国的“Open”等价物显示为“Öffnen”(希望您可以看到一个“O”,上面有两个点!)。带拉丁字符的数据库内容的XML编码

我有ASP代码读取数据库并返回XML中的记录。该文本传递给XMLEncode来构造XML,但似乎只处理“<”,“&”等5个特殊项。如果我转储XML,则重音字符保持不变。

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

如果我看使用Wireshark的原始数据包我看到“O”字节是十六进制D6,这似乎是它的十进制Unicode和ISO 8859值。

当我尝试解析客户端JS中的XML时,问题就开始了。我得到:

"An invalid character was found in text content" 

from IE。 FF和Chrome高兴地接受XML而不会打嗝,但浏览器将“Ö”字样显示为内部带有问号的钻石。

http://www.validome.org/xml/validate/报告“编码错误”。

http://www.w3schools.com/dom/dom_validate.asp认为它很好。

XML是UTF-8编码的。

我需要做些什么才能让IE在不投诉的情况下接受我的XML?

我需要做些什么才能让浏览器正确显示内容?

+0

您是否尝试将xml编码从'utf-8'改为'ISO 8859-1'? – Amarghosh 2010-05-28 04:42:29

+0

IE报告“系统不支持指定的编码,错误处理资源”。我在XML文件中改变了它:<?xml version =“1.0”encoding =“ISO 8859-1”?>和ASP响应:Response.ContentType =“text/xml; charset = ISO 8859-1”; ...对? – rossmcm 2010-05-28 05:07:43

回答

1

你怎么知道XML是UTF-8编码的?我不太了解MS环境,但在Java中,一个常见问题是假定只编写encoding="UTF-8"标题会导致它被UTF-8编码。您还必须配置写入器才能真正写入UTF-8。

你说Wireshark显示十六进制D6,这表示该流实际上不是UTF-8编码,无论标头说什么。

0

那么,我不完全确定为什么,但我能够得到它的工作。由Jim的评论提示我将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"> 

非常感谢吉姆。