代码之家  ›  专栏  ›  技术社区  ›  rossmcm

数据库内容的拉丁字符XML编码

  •  2
  • rossmcm  · 技术社区  · 15 年前

    我有一个ASP访问数据库,其中包含各种欧洲语言的字符串。数据库之前由各自国家的代理填充。它包含如您所期望的带有重音等字符的条目。如果我用MS Access打开数据库,这些字符就会显示出来。例如,德国的“open”等价物显示为“ffnen”(希望您能看到上面有2个点的“o”)。.

    我有读取数据库并返回XML记录的ASP代码。文本被传递给xmlcode以构造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而不抱怨,我需要做什么?

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

    2 回复  |  直到 12 年前
        1
  •  1
  •   Jim Garrison    15 年前

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

    你说wireshark显示十六进制d6,这意味着流实际上不是UTF-8编码的,不管报头怎么说。

        2
  •  0
  •   rossmcm    15 年前

    嗯,我不完全确定为什么,但我能让它工作。在Jim的评论的提示下,我将XML和响应编码从8859-1改回了UTF-8,还将页面的meta标记中的编码改为utf-8。

    在IE中,它现在可以毫无怨言地工作,浏览器现在显示正确的字符。

    这次我还用wireshark检查了原始字节,“_”字符在XML中编码为2字节(0xc3,0x96),而不是1字节的0xd6。

    综上所述:

    在生成XML响应头的服务器端ASP代码中:

    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"> 
    

    非常感谢吉姆。