我有一个ASP访问数据库,其中包含各种欧洲语言的字符串。该数据库是由各个国家的代理商事先填充的。它包含带有重音等字符的条目。如果我打开具有MS访问的数据库,则这些字符很好地显示出来。例如,德语等效的“开放”表示为“Öffnen”(希望您可以看到一个“ O”,上面有2个点!)。

我有读取数据库的ASP代码,并在XML中返回记录。该文本传递给XMLENCODE以构建XML,但这似乎只处理了5个特殊功能,例如“ <”,“”&“等等。

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

如果我看着带有Wireshark的原始数据包,我会发现“Ö”字节是十六进制D6,它似乎是十进制的Unicode和ISO 8859-1值。

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

"An invalid character was found in text content"

来自IE。 FF和Chrome愉快地接受XML而没有打ic,但浏览器将“Ö”角色显示为内部有问号的钻石。

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

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

XML是UTF-8编码。

我需要做什么才能让IE接受我的XML而不投诉?

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

有帮助吗?

解决方案

您怎么知道XML已编码UTF-8?我不太了解MS环境,但是在Java中,一个普遍的问题是假设仅写 encoding="UTF-8" 标头导致其编码UTF-8。您还必须配置作者实际编写UTF-8。

您说Wireshark显示了HEX D6,这表明该流实际上不是UTF-8编码,而不管标题如何。

其他提示

好吧,我不确定为什么,但是我能够使它起作用。在吉姆(Jim)的评论中,我将XML和响应编码从8859-1更改为UTF-8,也将页面的Meta标签编码为“ UTF-8”。

现在,它可以在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"> 

非常感谢吉姆。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top