XML的默认编码是UTF-8还是UTF-16?

XML的默认编码是UTF-8还是UTF-16?,xml,xml-serialization,Xml,Xml Serialization,国家: 如果不存在编码声明 在XML文档中(并且没有外部 编码声明机制,例如 HTTP头是可用的) XML文档的假定编码 取决于是否存在 字节顺序标记(BOM) BOM表是一个Unicode特殊标记 放置在该文件的顶部 指示其编码。物料清单是 UTF-8可选 First bytes Encoding assumed ----------------------------------------- EF BB BF UTF-8 FE FF

国家:

如果不存在编码声明 在XML文档中(并且没有外部 编码声明机制,例如 HTTP头是可用的) XML文档的假定编码 取决于是否存在 字节顺序标记(BOM)

BOM表是一个Unicode特殊标记 放置在该文件的顶部 指示其编码。物料清单是 UTF-8可选

First bytes        Encoding assumed
-----------------------------------------
EF BB BF           UTF-8
FE FF              UTF-16 (big-endian)
FF FE              UTF-16 (little-endian)
00 00 FE FF        UTF-32 (big-endian)
FF FE 00 00        UTF-32 (little-endian)
None of the above  UTF-8

上面这一段有没有简单的解释?

或者你必须用这样的行

<?xml version="1.0" encoding="iso-8859-1" ?>
(如您所见,我使用的是gnuwin32中的hexdump,但您也可以使用类似于此的hex编辑器

此文件前面没有BOM表。这是不可能的,因为用于BOM表的字符在ANSI编码中不存在。(因为没有BOM表,不支持ANSI编码的编辑器会将此文件视为UTF-8)

当我现在像utf8一样保存文件时,您将在“test”前面看到3个额外的字节(BOM):

(如果您使用不支持utf-8的文本编辑器打开此文件,您将实际看到这些字符“ï”?)

记事本还可以将文件保存为unicode,这意味着UTF-16 little-endian(UTF-16LE):

以下是保存为unicode(大端)(UTF-16BE)的版本:

现在考虑一个具有4个汉字的文本文件琀攀猀琀". 当我将其保存为unicode(big-endian)时,结果如下所示:

C:\>C:\gnuwin32\bin\hexdump -C test2-unicode-big-endian.txt
00000000  fe ff 74 00 65 00 73 00  74 00                    |þÿt.e.s.t.|
0000000a

如您所见,UTF-16LE中的“test”一词与“test”一词的存储方式相同琀攀猀琀在UTF-16BE中。但由于存储的BOM不同,您可以查看文件是否包含“测试”或琀攀猀琀“。如果没有BOM表,你必须猜测。

你要找的解释在该段下面的表格中…@deceze当然我也读了那部分!但我无法将粘贴表格复制到问题中,可以吗?我将表格复制并粘贴到你的问题中。:o)你的问题到底是什么?当然,这个问题不是XSLT问题。如果我对wikipedia的文章理解错误的话……这意味着第一个字符的编码“不,在第一个
@Wimmel:BOM前面有一个不可见的额外字符不是强制性的,所以你之前的评论不完全正确。@Wimmel。但是我们如何改变这个不可见的额外字符是什么呢?我经常用记事本。。那么这是否意味着没有这样的BOM表?@Pacerier:我修改了我的答案,更好地解释了BOM表。但如果还不清楚,请告诉我。
C:\>C:\gnuwin32\bin\hexdump -C test-utf8.txt
00000000  ef bb bf 74 65 73 74                              |test|
00000007
C:\>C:\gnuwin32\bin\hexdump -C test-unicode.txt
00000000  ff fe 74 00 65 00 73 00  74 00                    |ÿþt.e.s.t.|
0000000a
C:\>C:\gnuwin32\bin\hexdump -C test-unicode-big-endian.txt
00000000  fe ff 00 74 00 65 00 73  00 74                    |þÿ.t.e.s.t|
0000000a
C:\>C:\gnuwin32\bin\hexdump -C test2-unicode-big-endian.txt
00000000  fe ff 74 00 65 00 73 00  74 00                    |þÿt.e.s.t.|
0000000a