我在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