Pac*_*ier 17 xml xml-serialization
OpenTag FAQ说明:
如果XML文档中不存在编码声明(并且没有可用的外部编码声明机制,例如HTTP标头),则XML文档的假定编码取决于字节顺序标记(BOM)的存在.
BOM是位于文件顶部的Unicode特殊标记,用于指示其编码.BOM对于UTF-8是可选的.
Run Code Online (Sandbox Code Playgroud)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
对上段是否有一个愚蠢的解释?
wim*_*ica 29
要么你必须使用像这样的行
<?xml version="1.0" encoding="iso-8859-1" ?>
Run Code Online (Sandbox Code Playgroud)
指定使用哪种编码.如果未指定编码,则可以存在字节顺序标记(BOM).如果存在UTF-16或UTF-32的BOM,则使用该编码.否则UTF-8是编码.(UTF-8的BOM是可选的)
编辑
BOM是一个不可见的字符.但没有必要看到它.应用程序会自动处理它.使用Windows记事本时,可以在保存文件时选择编码.记事本将自动在文件的开头插入BOM.当您稍后重新打开文件时,记事本将识别BOM并使用正确的编码来读取文件.您无需修改BOM,如果您这样做,字符可能会有不同的含义,因此文本将不同.
我将尝试用一个例子来解释.考虑一个文本文件,只有字符"test".默认记事本将使用ANSI编码,当您以十六进制模式查看时,文本文件将如下所示:
C:\>C:\gnuwin32\bin\hexdump -C test-ansi.txt
00000000 74 65 73 74 |test|
00000004
Run Code Online (Sandbox Code Playgroud)
(如你所见,我正在使用gnuwin32中的hexdump,但你也可以使用像Frhed这样的十六进制编辑器来看这个.
此文件前面没有BOM.这是不可能的,因为用于BOM的字符在ANSI编码中不存在.(因为没有BOM,不支持ANSI编码的编辑器会将此文件视为UTF-8).
当我现在像utf8一样保存文件时,你会在"test"前面看到3个额外的字节(BOM):
C:\>C:\gnuwin32\bin\hexdump -C test-utf8.txt
00000000 ef bb bf 74 65 73 74 |test|
00000007
Run Code Online (Sandbox Code Playgroud)
(如果您使用不支持utf-8的文本编辑器打开此文件,您实际上会看到这些字符"")
记事本也可以将文件保存为unicode,这意味着UTF-16 little-endian(UTF-16LE):
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
Run Code Online (Sandbox Code Playgroud)
这里的版本保存为unicode(大端)(UTF-16BE):
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
Run Code Online (Sandbox Code Playgroud)
现在考虑一个带有4个汉字"琀攀猀琀"的文本文件.当我将其保存为unicode(大端)时,结果如下所示:
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
Run Code Online (Sandbox Code Playgroud)
如您所见,UTF-16LE中的"test"一词的存储方式与UTF-16BE中的"琀攀猀word"相同.但由于BOM存储不同,您可以查看该文件是否包含"test"或"琀攀猀琀".如果没有BOM,您将不得不猜测.
| 归档时间: |
|
| 查看次数: |
31735 次 |
| 最近记录: |