私は HTTP POST (x-www-form-urlencoded) の受信側にいて、フィールドの 1 つに 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 (特定の文字が数バイトで書き込まれる) で、次に 1 バイトずつ urlencode されます (「ä」は実際には %C3%A4 として送信されます)。
常に UTF-8 であると想定するようなハードコーディングはしたくありません (将来的には UTF-16 になる可能性があるため)。データにはキリル文字やアラビア文字が含まれている可能性があるため、他の文字セット (iso-8859-1 など) への「ハード変換」もできません。これを修正するにはどうすればよいですか?