2

我有一个 ASP Access 数据库,其中包含各种欧洲语言的字符串。该数据库由各自国家的代理商事先填充。如您所料,它包含带有重音等字符的条目。如果我用 MS Access 打开数据库,这些字符显示得很好。例如,“Open”的德语等价物显示为“Öffnen”(希望您能看到上面有 2 个点的“O”!)。

我有读取数据库并以 XML 格式返回记录的 ASP 代码。文本被传递给 XMLEncode 以构造 XML,但这似乎只处理 5 个特殊字符,如“<”、“&”等。如果我转储 XML,重音字符不会改变。

<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 而不会打嗝,但浏览器将“Ö”字符显示为内部带有问号的菱形。

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

http://www.w3schools.com/dom/dom_validate.asp认为没问题。

XML 是 UTF-8 编码的。

我需要做什么才能让 IE 毫无怨言地接受我的 XML?

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

4

2 回答 2

1

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

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

于 2010-05-28T20:52:51.117 回答
0

好吧,我不完全确定为什么,但我能够让它工作。在 Jim 的评论的提示下,我将 XML 和响应编码从 8859-1 更改回 UTF-8,以及页面 META 标记中的编码。

它现在可以在 IE 中正常运行,并且浏览器现在可以显示正确的字符。

这次我还使用 Wireshark 检查了原始字节,并且“Ö”字符在 XML 中被编码为 2 个字节(0xC3、0x96),而不是 0xD6 的 1 个字节。

总而言之:

在服务器端 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"> 

非常感谢吉姆。

于 2010-05-29T01:01:06.913 回答