⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xml数据的编码方式.htm

📁 本文对xml 的数据编码方式进行了精简的介绍。
💻 HTM
📖 第 1 页 / 共 3 页
字号:
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>时,可能收到的出错消息的类型。加载 XML DOM 文档的两个主要方法是 
            <B>LoadXML</B> 方法和 <B>Load</B> 方法。</P>
            <P><B>LoadXML</B> 方法总是采用只在 UCS-2 或 UTF-16 中编码的 Unicode BSTR。如果将非有效的 
            Unicode BSTR 的内容传递给 <B>LoadXML,</B>则加载会失败。</P>
            <P><B>Load</B> 方法可将以下内容当作 VARIANT:</P>
            <TABLE class=clsRef cellSpacing=2 cellPadding=5 width="80%" 
border=0>
              <TBODY>
              <TR vAlign=top>
                <TD width="30%" bgColor=#a6caf0><B><FONT class=90v><FONT 
                  size=2>Value</FONT></B></FONT></TD>
                <TD width="70%" bgColor=#a6caf0><B><FONT class=90v><FONT 
                  size=2>Description</FONT></B></FONT></TD></TR>
              <TR vAlign=top>
                <TD width="30%" bgColor=#eeeee>URL</TD>
                <TD width="70%" bgColor=#eeeee><FONT class=90v size=2>如果 
                  VARIANT 是 BSTR,则将其理解为 URL。</FONT></TD></TR>
              <TR vAlign=top>
                <TD width="30%" bgColor=#eeeee>VT_ARRAY | VT_UI1</TD>
                <TD width="70%" bgColor=#eeeee><FONT class=90v size=2>VARIANT 
                  也可以是包含原始编码字节的 SAFEARRAY。</FONT></TD></TR>
              <TR vAlign=top>
                <TD width="30%" bgColor=#eeeee><B><FONT class=90v><FONT 
                  size=2>IUnknown</FONT></B></FONT></TD>
                <TD width="70%" bgColor=#eeeee><FONT class=90v><FONT size=2>如果 
                  VARIANT 是 <B><FONT class=90v>IUnknown </B>接口,则 DOM 文档为 
                  <B><FONT class=90v>IStream</B>、<B><FONT 
                  class=90v>IPersistStream</B> 和 <B><FONT 
                  class=90v>IPersistStreamInit</B> 调用 <B><FONT 
                  class=90v>QueryInterface</B>。</FONT></FONT></FONT></FONT></FONT></FONT></FONT></TD></TR></TBODY></TABLE><BR>
            <P><B>Load</B> 方法实现以下算法,用于确定 XML 的<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>编码或<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>集。 
            <UL type=disc>
              <LI>如果 Content-Type HTTP 标题定义了<A 
              href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
              target=_blank>字符</A>集,该<A 
              href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
              target=_blank>字符</A>集则替代 XML 文档本身的所有内容。因为没有 HTTP 标题,所以这显然不适用于 
              SAFEARRAY 和 <B>IStream</B> 机制。<BR><BR>
              <LI>如果有双字节 Unicode 字节次序标志,则它假设编码是 UTF-16。它既可处理大 endian,也可处理小 
              endian。<BR><BR>
              <LI>如果有四字节 Unicode 字节次序标志 (0xFF 0xFE 0xFF 0xFE),则它假设编码是 
              UTF-32。它既可处理大 endian,也可处理小 endian。<BR><BR>
              <LI>否则,它假设编码是 UTF-8,除非它用指定其他一些<A 
              href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
              target=_blank>字符</A>集的编码属性(如 ISO-8859-1、Windows-1252、Shift-JIS 
              等),找到 XML 声明。 </LI></UL>
            <P>您将看到两个从 XML DOM 返回的指出编码问题的出错消息。第一个通常指出文档中的<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>与 XML 文档的编码不匹配:</P><PRE class=clsCode>在文本内容中发现了一个无效<A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" target=_blank>字符</A>。
</PRE>
            <P><B>ParseError</B> 对象可告诉您这个捣乱<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>在某一行的确切位置,以便使您解决该问题。</P>
            <P>第二个出错消息指出您一开始用的是 Unicode 字节次序标志(或调用了 <B>LoadXML</B> 
            方法),然后编码属性指定了不是双字节编码的编码(如 UTF-8 或 Windows-1250): </P><PRE class=clsCode>不支持从当前编码转换到指定的编码。
</PRE>
            <P>另外,您可能调用了 <B>Load 
            </B>方法,并在一开始使用了单字节编码(没有字节次序标志),但是它随后发现了指定双字节或四字节编码(如 UTF-16 或 
            UCS-4)的编码属性。 </P>
            <P>基本原则是不能利用 XML 声明的编码属性,在多字节<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>集如 UTF-8、Shift-JIS 或 Windows-1250,与 Unicode <A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>编码如 UTF-16、UCS-2 或 UCS-4 之间进行转换,这是因为声明本身必须对每个<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>都使用与文档其余部分相同数量的字节。</P>
            <P>最后,<B>IXMLHttpRequest</B> 接口提供如下方法,用以访问下载的数据:</P>
            <TABLE class=clsRef cellSpacing=2 cellPadding=5 width="75%" 
border=0>
              <TBODY>
              <TR vAlign=top>
                <TD width="33%" bgColor=#a6caf0><B><FONT class=90v><FONT 
                  size=2>Methods</FONT></B></FONT></TD>
                <TD width="67%" bgColor=#a6caf0><B><FONT class=90v><FONT 
                  size=2>Description</FONT></B></FONT></TD></TR>
              <TR vAlign=top>
                <TD width="33%" bgColor=#eeeee><B><FONT class=90v><FONT 
                  size=2>ResponseXML</FONT></B></FONT></TD>
                <TD width="67%" bgColor=#eeeee><FONT class=90v><FONT 
                  size=2>表示由 MSXML DOM 分析器分析的响应实体(用与 <B><FONT class=90v>Load 
                  </B>方法相同的规则)。</FONT></FONT></FONT></TD></TR>
              <TR vAlign=top>
                <TD width="33%" bgColor=#eeeee><B><FONT class=90v><FONT 
                  size=2>ResponseText</FONT></B></FONT></TD>
                <TD width="67%" bgColor=#eeeee><FONT class=90v><FONT class=90v 
                  size=2>表示作为字串的响应实体。本方法盲目地解码从 UTF-8 收到的消息实体。这是一个已知问题,应在即将面市的 
                  MSXML Web Release 中得到解决。</FONT></FONT></TD></TR>
              <TR vAlign=top>
                <TD width="33%" bgColor=#eeeee><B><FONT class=90v><FONT 
                  size=2>ResponseBody</FONT></B></FONT></TD>
                <TD width="67%" bgColor=#eeeee><FONT class=90v 
                  size=2>表示作为无符号字节数组的响应实体。</FONT></TD></TR><FONT class=90v>
              <TR vAlign=top>
                <TD width="33%" bgColor=#eeeee><B><FONT class=90v><FONT 
                  size=2>ResponseStream</FONT></B></FONT></TD>
                <TD width="67%" bgColor=#eeeee><FONT class=90v><FONT 
                  size=2>表示作为 <B><FONT class=90v>IStream</B> 
                  接口的响应实体。</FONT></FONT></FONT></TD></TR></TBODY></TABLE><BR>
            <H2><A name=2>用 MSXML 创建新的 XML 文档</H2></A>
            <P>一旦加载了 XML 文档,即可用 DOM 处理 XML 文档,而不必考虑任何编码问题,因为文档是作为 Unicode 
            存储在内存中的。所有 XML DOM 接口都是基于 COM BSTR 的,后者是双字节的 Unicode 
            字串。这就是说,您可以从新开始在包含所有 Unicode <A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>的内存中建立 MSXML DOM 文档,并且所有组建将会共享该内存中的 DOM,而不会对 
            Unicode <A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>值的意思有任何疑惑。然而,当对其进行保存时,MSXML 将以默认方式按 UTF-8 
            编码所有数据。例如,假设您进行了以下处理:</P><PRE class=clsCode>var xmldoc = new ActiveXObject("Microsoft.XMLDOM")
var e = xmldoc.createElement("test");
e.text = "&aring;;
xmldoc.appendChild(e);
xmldoc.save("foo.xml");
</PRE>
            <P>下列 UTF-8 编码<A 
            href="http://jizhuwo.com/Soft/Tools/File/index.html" 
            target=_blank>文件</A>的结果是:</P><PRE class=clsCode>&lt;test&gt;&Atilde;&yen;&lt;/test&gt;
</PRE>
            <P class=indent><B><B>注意</B></B> 
            上述例子只有当在浏览器以外的环境运行时,才有效。由于受到安全限制,在浏览器里调用 <B>Save</B> 
            方法将不会产生相同的结果。</P>
            <P>尽管这看上去有点怪,但却是正确的。下列测试装载了用 UTF-8 编码的<A 
            href="http://jizhuwo.com/Soft/Tools/File/index.html" 
            target=_blank>文件</A>,并测试 UTF-8 是否被重新解码为 Unicode <A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>值 229。它是:</P><PRE class=clsCode>var xmldoc = new ActiveXObject("Microsoft.XMLDOM")
xmldoc.load("foo.xml");
if (xmldoc.documentElement.text.charCodeAt(0) == 229)
{
    WScript.echo("Yippee - it worked !!");
}
</PRE>
            <P>要想更改 XML DOM <B>Save</B> 方法使用的编码,需要用如下位于文档顶部的编码属性创建 XML 声明:</P><PRE class=clsCode>var pi = xmldoc.createProcessingInstruction("xml", 
                        " version='1.0' encoding='ISO-8859-1'");
xmldoc.appendChild(pi);
</PRE>
            <P>调用 <B>save</B> 方法时,您就会得到以下用 ISO-8859-1 编码的<A 
            href="http://jizhuwo.com/Soft/Tools/File/index.html" 
            target=_blank>文件</A>:</P><PRE class=clsCode>&lt;?xml version="1.0" encoding="ISO-8859-1"?&gt;
&lt;test&gt;&aring;lt;/test&gt;
</PRE>
            <P>现在,小心不要被 <B>XML </B>属性迷惑。<B>XML</B> 属性返回 Unicode 字串。如果在创建 
            ISO-8859-1 编码声明之后,调用 <B>DOMDocument</B> 对象上的 <B>XML</B> 属性,即可取回以下 
            Unicode 字串:</P><PRE class=clsCode>&lt;?xml version="1.0"?&gt;
&lt;test&gt;&aring;lt;/test&gt;
</PRE>
            <P>请注意这里没有 ISO-8859-1 编码声明了。这是正常的。这样做的原因是使您可以转而用此字串调用 
            <B>LoadXML</B>,它会起作用。如果它不这么做,<B>LoadXML</B> 
            会失败并返回出错消息:“不支持从当前编码切换到指定的编码。”</P>
            <H2><A name=3>结论</H2></A>
            <P>但愿本文有助于解释<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>编码的工作原理,特别是在 XML 和 MSXML DOM 中的工作原理。一旦您理解了<A 
            href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
            target=_blank>字符</A>集编码,它是相当简单的,而且 XML 是非常出色的,因为它在这方面未留有丝毫含糊的余地。尽管 
            MSXML DOM 有几处怪异需要密切留意,但它仍不失为一个能让您读取和写入任何 XML 编码的强大工具。</P>
            <H2><A name=4>有关详细信息</H2></A>
            <UL type=disc>
              <LI>Microsoft MSDN Online Library: XML DOM Reference(Microsoft 
              MSDN 联机库:XML DOM 引用)<BR><BR>
              <LI>Character Encoding Model(<A 
              href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
              target=_blank>字符</A>编码模型),作者:Ken Whistler 和 Mark Davis<BR><BR>
              <LI>IANA Character Sets(IANA <A 
              href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html" 
              target=_blank>字符</A>集)<BR><BR>
              <LI><A href="http://www.ietf.org/">http://www.ietf.org/</A>(英文)的 
              Internet Engineering Task Force (IETF) 提供了 RFC 列表<BR><BR>
              <LI>Microsoft MSDN Online Library: Compatibility Issues with Mixed 
              Environments(Microsoft MSDN 联机库:与混合环境的兼容性问题) </LI></UL>
            <DIV></DIV><BR><BR>
            <P></P>&lt;!-- content end --&gt; 
            <DIV align=left>
            <TABLE cellSpacing=0 cellPadding=0 width="100%" border=0>
              <TBODY>
              <TR>
                <TD width="50%"><A 
                  href="http://www.microsoft.com/china/msdn/library/techart/xmlencodings.<a%20href=" 
                  target=_blank index.html? Asp Web Dev jizhuwo.com 
                  http:>asp</A>#top"&gt;</A></TD>
                <TD width="50%">
                  <P align=right><A 
                  href="http://www.microsoft.com/china/msdn/library/techart/xmlencodings.<a%20href=" 
                  target=_blank index.html? Asp Web Dev jizhuwo.com 
                  http:>asp</A>#top"&gt;</A>&nbsp;</P></TD></TR>
              <TR>
                <TD width="100%" colSpan=2></TD></TR></TBODY></TABLE></DIV><BR><FONT 
            size=2><SPAN class=90V><SPAN 
            class=90v><BR></SPAN></FONT></SPAN></FONT></TD></TR></TBODY></TABLE></TD></TR>
  <TR>
    <TD bgColor=#d6d6d6 height=1></TD></TR>
  <TR></TR>
  <TR>
    <TD align=middle colSpan=9></TD></TR></TBODY></TABLE>
<TABLE class=border3 cellSpacing=0 cellPadding=0 width=760 align=center 
bgColor=#ffffff border=0>
  <TBODY>
  <TR>
    <TD colSpan=3 height=2></TD></TR></TBODY></TABLE>
<SCRIPT src=""></SCRIPT>
</BODY></HTML>

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -