我在HTTP POST(x-www-form-urlencoded)的接收端,其中一个字段包含一个XML文档。我需要接收该文档,查看几个元素,并将其存储在数据库中(以备后用)。 该文档采用UTF-8格式(并且具有相应的标题),并且可以包含大量奇怪的字符。在MSXML/ASP中解析UTF-8编码的XML
当我收到的数据,这样的:
Set xmlDoc = CreateObject("MSXML2.DOMDocument.3.0")
xmlDoc.async = False
xmlDoc.loadXML(Request.Form("xml"))
的一切,我可以挖掘出DOM文档仍然是UTF-8格式。 例如,这个文件(非常简单):
<?xml version="1.0" encoding="UTF-8"?>
<data>
ä
</data>
永远是为
<?xml version="1.0" encoding="UTF-8"?>
<data>
ä
</data>
如果我看xmlDoc.XML,我得到这个:
<?xml version="1.0"?>
<data>
ä
</data>
它删除来自头文件的编码(因为我在VBScript中使用的任何字符串都是“encoding-agnostic”,这种说法是有道理的),但它仍然是一系列代表UTF-8编码的字符cument。
就好像MSXML不关心标题中的编码信息一样。是MSXML的问题,还是与发布数据的编码?它是一种“双重编码”形式,首先是UTF-8(某些字符用几个字节写入),然后逐字节地进行urlen编码(“ä”实际上是作为%C3%A4发送的)。
我不想硬编码任何东西,比如假设它始终是UTF-8(因为它将来可能会是UTF-16)。我无法对任何其他字符集(如iso-8859-1)进行“硬转换”,因为数据可能包含西里尔字母和阿拉伯字符。我应该如何解决这个问题?
@ionn:我有点困惑,你是@jstck团队的一员吗?对于选项2,您可以尝试在发送的请求标头中添加标头“Accept-Charset:UTF-8”。然而,这也有点奇怪,因为它实际上说明了所需的__response__字符集应该是什么。我发现选项1更可靠。我不知道CURL,但是在脚本环境中,选项3是比较可取的,但是CURL可能不同。 – AnthonyWJones 2009-09-17 18:57:27