📄 xml数据的编码方式.htm
字号:
<TD width="33%" bgColor=#eeeee>140</TD>
<TD width="33%" bgColor=#eeeee>Œ</TD>
<TD width="34%" bgColor=#eeeee>å</TD></TR>
<TR vAlign=top>
<TD width="33%" bgColor=#eeeee>229</TD>
<TD width="33%" bgColor=#eeeee>å</TD>
<TD width="34%" bgColor=#eeeee>Â</TD></TR>
<TR vAlign=top>
<TD width="33%" bgColor=#eeeee>231</TD>
<TD width="33%" bgColor=#eeeee>ç</TD>
<TD width="34%" bgColor=#eeeee>Á</TD></TR>
<TR vAlign=top>
<TD width="33%" bgColor=#eeeee>232</TD>
<TD width="33%" bgColor=#eeeee>è</TD>
<TD width="34%" bgColor=#eeeee>Ë</TD></TR>
<TR vAlign=top>
<TD width="33%" bgColor=#eeeee>233</TD>
<TD width="33%" bgColor=#eeeee>é</TD>
<TD width="34%" bgColor=#eeeee>È</TD></TR></TBODY></TABLE><BR>
<P>比方说,如果您的祖母从 http://www.barnesandnoble.com/(英文)订购了一本新书,她不会想到她的
Macintosh 计算机存储<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>的方式,并不同于运行 www.barnesandnoble.com(英文)的新 Windows
2000 Web <A href="http://jizhuwo.com/System/Server/index.html"
target=_blank>服务器</A>。在往 Internet 订购单的发货栏中输入瑞典家中的地址时,她相信 Internet
会正确地传递<A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A> <B>å</B>(在其 Macintosh 上的字节值是
140),并没想到接收和处理她发送消息的计算机会将字节值 140 转换为字母 <B>Œ</B>。</P>
<H3>Unicode</H3>
<P><A href="http://www.unicode.org/">Unicode
Consortium(统一码协会)</A>确信(用双字节而不是单字节表示每个<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>)定义一个通用的代码页是个好主意,该代码页适用于全世界所有的语言,从而不同代码页之间的映射问题将不复存在。</P>
<P>既然如此,如果 Unicode 解决了跨平台的<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>编码问题,那为何它却未成为唯一的标准呢?第一个问题是,转换到 Unicode
有时意味着使所有的<A href="http://jizhuwo.com/Soft/Tools/File/index.html"
target=_blank>文件</A>大小加倍 — 这样做在<A
href="http://jizhuwo.com/Net/index.html"
target=_blank>网络</A>世界中是不可想象的。因此有人仍乐于使用老的、单字节的<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集,如 ISO-8859-1 到 ISO-8859-15、Shift-JIS、EUC-KR
等等。</P>
<P>第二个问题是,仍存在许多并非基于 Unicode 的<A
href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>,这就意味着在<A
href="http://jizhuwo.com/Net/index.html" target=_blank>网络</A>上,某些组成
Unicode <A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>的字节值可能会给那些更旧的<A
href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>造成严重问题。因此定义了“Unicode 转换格式 (UTF)”;它们运用位转换技术对
Unicode <A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>进行编码,使其成为在老<A
href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>上“透明的”(或可安全通过)的字节值。</P>
<P>此类<A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>编码中最普及的是 UTF-8。UTF-8 采用 Unicode 标准的前 127 个<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>:A-Z、a-z 和 0-9,以及几个标点<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>),并直接将其映射到单字节值。然后采用位转换技术,用字节的高位来编码 Unicode <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> <B>å</B> (0xE5) 变成了下列双字节乱码:<B>Ã¥</B> (0xC3
0xA5)。所以,除非您能够在脑海里进行位转换,否则,在UTF-8 中编码的数据是无法被人读懂的。</P>
<H3>Content-Type 标题</H3>
<P>因为更旧的单字节<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>集之后,传输数据的问题才能得以解决。认识到这一点后,Internet 电子邮件和 HTTP
协议小组定义了一种标准方法,用以在消息标题 <B>Content-Type</B> 属性中指定<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>集名称列表中指定一个<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>集名称是由 Internet Assigned Numbers Authority
(IANA)定义的。典型的 HTTP 标题都可能包含下列文本:</P><PRE class=clsCode>HTTP/1.1 200 OK
Content-Length: 15327
Content-Type: text/html; <B>charset:ISO-8859-1;</B>
Server: Microsoft-IIS/5.0
Content-Location: http://www.microsoft.com/Default.htm
Date: Wed, 08 Dec 1999 00:55:26 GMT
Last-Modified: Mon, 06 Dec 1999 22:56:30 GMT
</PRE>
<P>该标题向应用<A href="http://jizhuwo.com/Dev/index.html"
target=_blank>程序</A>表明,跟在标题后面的内容位于 ISO-8859-1 <A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集中。</P>
<H3>Content-Type 元标记</H3>
<P><B>Content-Type</B> 属性是可选项,在有些应用<A
href="http://jizhuwo.com/Dev/index.html" target=_blank>程序</A>中,HTTP
标题的信息被去掉了,而只有 HTML 本身通过。为了补救这一点,HTML 标准小组定义了一种可选的元标记方法,用于指定 HTML
文档本身的<A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集,使 HTML 文档<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集是自描述的。</P><PRE class=clsCode><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1">
</PRE>
<P>在这种情况下,<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集 ISO-8859-1 说明在此特定的 HTML 页中,字节值 229 表示
<B>å</B>。现在该页对任何<A href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>来说,都是完全清楚的,数据不会被曲解。遗憾的是,由于此元标记是可选的,所以它给错误留下了空子。</P>
<H3><A href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>实体</H3>
<P>不是所有的<A href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>支持所有的注册<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集。例如,我并不认为很多平台实际上可支持称为 EBCDIC 的 <A
href="http://www.ibm.com/" target=_blank>IBM</A> 主机<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集。Windows NT 是支持的,但许多其他<A
href="http://jizhuwo.com/System/index.html"
target=_blank>系统</A>很可能不支持 — 这大概就是 <A
href="http://www.ibm.com/">http://www.ibm.com/</A>(英文)主页为什么生成 ASCII
的原因。</P>
<P>作为备选方案,HTML 允许通过指定确切的 Unicode <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>进行编码。然后将这些<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>集的分析,即可确切地确定其 Unicode 值。它的语法是 ?amp;#229;?or
?amp;#xE5;?。</P>
<H2><A name=xmlencodings_charenc>XML 和<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>编码</H2></A>
<P>XML 从 HTML 那里借鉴了这些思想,并使之更进一步,定义了一个彻底明确的算法,以确定编码使用的<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集。在 XML 中,由 XML 声明中的可选编码属性定义<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>编码。下列算法确定默认的编码:</P>
<P class=indent>如果<A
href="http://jizhuwo.com/Soft/Tools/File/index.html"
target=_blank>文件</A>以 Unicode 字节次序标志 [0xFF 0xFE] 或 [0xFE 0xFF]
开头,则认为该文档是在 UTF-16 编码中。否则,它在 UTF-8 中。 </P>
<P>以下是所有正确和等效的 XML 文档:</P>
<TABLE class=clsRef cellSpacing=2 cellPadding=5 width="98%"
border=0>
<TBODY>
<TR vAlign=top>
<TD width="28%" bgColor=#a6caf0><FONT class=90v><B><FONT
class=90v><FONT size=2><A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集或编码</FONT></B></FONT></FONT></TD>
<TD width="32%" bgColor=#a6caf0><FONT class=90v><B><FONT
class=90v><FONT size=2>HTTP 标题</FONT></B></FONT></FONT></TD>
<TD width="40%" bgColor=#a6caf0><FONT class=90v><B><FONT
class=90v><FONT size=2>XML 文档</FONT></B></FONT></FONT></TD></TR>
<TR vAlign=top>
<TD width="28%" bgColor=#eeeee><FONT class=90v><FONT class=90v
size=2>ISO-8859-1</FONT></FONT></TD>
<TD width="32%" bgColor=#eeeee><FONT class=90v
size=2>Content-Type: text/xml; charset:ISO-8859-1;</FONT></TD>
<TD width="40%" bgColor=#eeeee><FONT class=90v
size=2><test>ålt;/test></FONT></TD></TR>
<TR vAlign=top>
<TD width="28%" bgColor=#eeeee><FONT class=90v
size=2>UTF-8</FONT></TD>
<TD width="32%" bgColor=#eeeee><FONT class=90v
size=2>Content-Type: text/xml;</FONT></TD>
<TD width="40%" bgColor=#eeeee><FONT class=90v
size=2><test>Ã¥</test></FONT></TD></TR>
<TR vAlign=top>
<TD width="28%" bgColor=#eeeee><FONT class=90v
size=2>ISO-8859-1</FONT></TD>
<TD width="32%" bgColor=#eeeee><FONT class=90v
size=2>Content-Type: text/xml;</FONT></TD>
<TD width="40%" bgColor=#eeeee><FONT class=90v size=2><?xml
version="1.0"
encoding="ISO-8859-1"?><BR><test>ålt;/test></FONT></TD></TR>
<TR vAlign=top>
<TD width="28%" bgColor=#eeeee><FONT class=90v
size=2>UTF-8(用<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>实体)</FONT></TD>
<TD width="32%" bgColor=#eeeee><FONT class=90v
size=2>Content-Type: text/xml;</FONT></TD>
<TD width="40%" bgColor=#eeeee><FONT class=90v
size=2><test>&#229;</test></FONT></TD></TR>
<TR vAlign=top>
<TD width="28%" bgColor=#eeeee><FONT class=90v
size=2>UTF-16(带字节次序标志的 Unicode)</FONT></TD>
<TD width="32%" bgColor=#eeeee><FONT class=90v
size=2>Content-Type: text/xml;</FONT></TD>
<TD width="40%" bgColor=#eeeee><FONT class=90v size=2>ff fe 3c
00 74 00 65 00 73 00 74 00 3e 00 e5 00
..<.t.e.s.t.>...<BR>3c 00 2f 00 74 00 65 00 73 00 74 00
3e 00 0d 00 <./.t.e.s.t.>...<BR>0a
00</FONT></TD></TR></TBODY></TABLE><BR>
<H2><A name=xmlencodings_msxmldom><A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>集和 MSXML DOM</H2></A>
<P>现在,讨论过不同的<A
href="http://jizhuwo.com/Dev/Programme/VC/Str/index.html"
target=_blank>字符</A>编码方法之后,让我们来看看如何在 MSXML DOM 中加载 XML
文档,以及当碰到模糊编码的<A
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -