gpt4 book ai didi

xml - HTTP 'charset' 和 XML 'encoding' 不匹配

转载 作者:数据小太阳 更新时间:2023-10-29 01:58:28 27 4
gpt4 key购买 nike

我遇到了一个返回带有 UTF-8 charset 的 HTTP Content-Type header 的 Web 服务:

Content-Type: text/xml;charset=UTF-8

...以及值为 ISO-8859-1(又名 latin1)的 XML 声明 encoding 属性:

<?xml version='1.0' encoding="ISO-8859-1" standalone="no" ?>

当我尝试在 Firefox 中显示来自此 Web 服务的响应时,遇到 á ( small letter a with acute ).

我对 Firefox 发出此解析错误并不感到意外。我想说的是,不等同于 HTTP 字符集的 XML 编码永远是正确的。我对吗?这种情况总是是否应该被视为网络服务器配置问题?

最佳答案

问题

你有 test/xmlUTF-8 字符集。在这种情况下,RFC 3023 的第 8.1 节“使用 UTF-8 字符集的文本/xml”适用。

<?xml version="1.0" encoding="utf-8"?>

This is the recommended charset value for use with text/xml. Since the charset parameter is provided, MIME and XML processors MUST treat the enclosed entity as UTF-8 encoded.

不幸的是,这只定义了 XML 编码也是 utf-8 的情况,您在这里没有。

但是,还有一节 8.20“不一致的示例:带有 UTF-8 字符集的文本/xml”,它恰好提到了您遇到的情况:

Content-type: text/xml; charset="utf-8"

<?xml version="1.0" encoding="iso-8859-1"?>

Since the charset parameter is provided in the Content-Type header, MIME and XML processors MUST treat the enclosed entity as UTF-8 encoded. That is, the "iso-8859-1" encoding MUST be ignored.

现在,您的文档(您应该使用十六进制编辑器进行验证)可能包含 ISO-8859-1 格式的 á,即 0xE1(十六进制)。由于忽略了 ISO 编码并应用了 UTF-8,因此应该改为 0xC3 0xA1

在 UTF-8 中,0xE1 本身不是一个字符。相反,它是覆盖 Unicode 范围 U+1000 到 U+1FFF 的 3 字节字符序列的开头。要知道它将解码成什么,我们需要知道 á 后面的 2 个字节。它后面很可能是 ASCII 集中的“正常”字符。这将是一个无效字符,因为 0xE1 后面的 2 个字节必须是 0x80 或更高 - 因此会发生编码错误。

您的问题

I want to say that an XML encoding that is not equivalent to the HTTP character set is never correct. Am I right?

好吧,至少不推荐这样做,您需要详细了解 RFC 3023 才能知道在这种情况下会发生什么。如果内容类型和编码匹配,那就容易多了。

Should such a situation always be considered a web server configuration problem?

没有。这也可能是一个实现问题,例如程序员已经在应用程序中定义了内容类型和编码,您不能在网络服务器配置中对它做太多事情。

关于xml - HTTP 'charset' 和 XML 'encoding' 不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26676618/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com