我在 HTTP POST (x-www-form-urlencoded) 的接收端,其中一个字段包含 XML 文档。我需要接收该文档,查看几个元素,并将其存储在数据库中(供以后使用)。该文档为 UTF-8 格式(并具有适当的标题),并且可以包含许多奇怪的字符。
当我收到数据时,如下所示:
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 中使用的任何字符串都是“与编码无关的”,这是有道理的),但它仍然是表示 UTF-8 编码文档的字符序列。
就好像 MSXML 不关心标头中的编码信息一样。是 MSXML 的问题,还是帖子数据的编码问题?它是“双重编码”的一种形式,首先是 UTF-8(其中某些字符用几个字节写入),然后是一个字节一个字节的 urlencoded(“ä”实际上是作为 %C3%A4 发送的)。
我不想硬编码任何东西,比如假设它总是 UTF-8(因为它很可能在未来的某个时候是 UTF-16)。我也不能对任何其他字符集(例如 iso-8859-1)进行“硬转换”,因为数据可以包含西里尔字母和阿拉伯语字符。我应该如何解决这个问题?