'charset = UTF-16' отсутствует в результате преобразования с MSXML4.0 - PullRequest
1 голос
/ 25 января 2010

У меня есть некоторые проблемы с "charset" в результате преобразования с различными версиями MSXML.

Приведенный ниже код преобразует XML в HTML с MSXML3.0

    Dim xmlDoc As New MSXML2.DOMDocument
    xmlDoc.async = False
    Dim strXML As String
    strXML = "<Results><ElapsedTime>3000</ElapsedTime></Results>"
    xmlDoc.loadXML(strXML)

    Dim xslDoc As New MSXML2.FreeThreadedDOMDocument
    xslDoc.async = False
    Dim strXSL As String
    strXSL = "C:\Test.xsl"
    xslDoc.load(strXSL)

    Dim xslt As New MSXML2.XSLTemplate
    xslt.stylesheet = xslDoc

    Dim xslProc As MSXML2.IXSLProcessor
    xslProc = xslt.createProcessor
    xslProc.input = xmlDoc
    xslProc.transform()

    Debug.Print(xslProc.output)

================================

Содержимое "Test.xsl" есть,

<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
  <xsl:template match="Results">
    <html>
      <head>
        <title>Report</title>
      </head>
    </html>
  </xsl:template>
</xsl:stylesheet>

===============================

Вывод,

<html>
<head>
<META http-equiv="Content-Type" content="text/html; charset=UTF-16">
<title>Report</title>
</head>
</html>

Я не уверен, почему кодировка всегда установлена ​​как "UTF-16" с MSXML3.0

=========================

Затем я изменяю код для использования MSXML4, например,

Dim xmlDoc As New MSXML2.DOMDocument40
...
Dim xslDoc As New MSXML2.FreeThreadedDOMDocument40
...
Dim xslt As New MSXML2.XSLTemplate40
...

=====================

На этот раз вывод:

<html>
<head>
<META http-equiv="Content-Type" content="text/html">
<title>Report</title>
</head>
</html>

В MSXML4.0 не выводится кодировка.

=====================

Подскажите, пожалуйста, какой из них правильный? Почему различия происходят?

1 Ответ

0 голосов
/ 25 января 2010

Ну, в общем, MSXML отстой в получении правильной кодировки символов. По какой-то причине, из-за фриккинга, они выбрали кодировку UTF-16 по умолчанию.

Но вы можете попытаться добавить эту строку сразу после строки xsl: stylesheet:

<xsl:output method="html" version="1.0" encoding="utf-8" indent="yes" omit-xml-declaration="yes" doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN" doctype-system="http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...