Я на приемном конце 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 (где определенные символы записываются с несколькими байтами), а затем байтовое кодирование в байтах («ä» фактически отправляется как% C3% A4).
Я бы не хотел жестко кодировать что-либо, например, предполагая, что это всегда UTF-8 (как это может быть UTF-16 когда-нибудь в будущем). Я также не могу выполнить «жесткое преобразование» в любой другой набор символов (например, iso-8859-1), поскольку данные могут содержать символы кириллицы и арабского языка. Как мне исправить это?