【问题标题】:XML encoding of database contents with Latin characters带有拉丁字符的数据库内容的 XML 编码
【发布时间】:2011-02-24 23:31:22
【问题描述】:

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

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

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

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

XML 是 UTF-8 编码的。

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

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

【问题讨论】:

  • 您是否尝试将 xml 编码从 utf-8 更改为 ISO 8859-1
  • IE 报告“系统不支持指定的编码。错误处理资源”。我在 XML 文件中更改了它: 和 ASP 响应: Response.ContentType = "text/xml; charset=ISO 8859-1" ; ...对吗?

标签: xml ajax character-encoding latin


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

    嗯,我不完全确定为什么,但我能够让它工作。在 Jim 的 cmets 的提示下,我将 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"> 
    

    非常感谢吉姆。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-27
      • 2013-08-28
      • 1970-01-01
      • 2014-01-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多