我有两个内容相同的文件。一个文件有XML扩展,另一个文件有。两个文件都以ASCII编码。它们都包含En破折号字符(十六进制值96)。
当我使用txt扩展名打开文件时,文件显示为我所期望的。 En dash正确显示为破折号。
但是,当我打开XML文件时,En dash字符在倒置的前景/背景颜色中显示为x96。
这个xml文件的显示是否与ASCII编码文件有关,但该文件包含: <?xml version =" 1.0"编码=" UTF-8">
为什么角色无法正确显示?当我十六进制编辑XML文件时,我看到En dash是十六进制值96,它仍在扩展的ASCII表中。
档案样本:
<?xml version="1.0" encoding="UTF-8"?>
<x>Plug & Play ֠No wire splicing necessary</x>
按下&#34; Play&#34; &先前&#34;无&#34 ;.请注意前导和尾随空间。
答案 0 :(得分:0)
您正在创建无效的XML文件。在这种情况下,我认为编辑器没有普遍接受的正确行为。记事本将其解释为文本文件。 Notepad ++试图将其解释为有效的XML文件并指出问题。
如果使用“打开”对话框,记事本成功的原因是您告诉它文件的编码:“ANSI”。如果你使用拖放或其他方法,它要么猜测显然足够接近的编码,要么总是使用“ANSI”。
Notepad ++正在为您提供更多帮助,因为它不仅仅是一般的文本编辑器。它将文件解释为XML文件(可能基于扩展名)。
XML文档可选地指示用于其字节表示的编码。您正在将文件编写为某些ANSI编码(可能是Windows-1252),但将其标记为UTF-8。这要求XML处理器使用UTF-8。 (由于编码的相似性,程序可以使用猜测的编码来读取指示的编码并使用它再次读取文档。)
你在这里运气不好,因为没有错误的编码导致加扰字符的无声错误,你的数据实际上显示为无效。 UTF-8不生成或允许值为0-255的任意序列字节。仅当0x96是编码某些Unicode代码点的序列和字节模式的一部分时,才允许使用0x96。简单来说,该文件无效UTF-8。 Notepad ++突出显示证明这一点的字节。如果尝试将文件读取为UTF-8成功但是会产生意外结果,那将是不吉利的。
解决方案是将指示的编码与实际编码相匹配。通常,XML库具有为您执行此操作的编写器功能。问题是您使用的是没有的编写器,并且您实际上并不知道正在使用哪种“ANSI”编码。您似乎还需要不使用UTF-16。也许你应该得到一个积极的声明,你可以使用什么。如果使用后处理步骤,许多工具(如PowerShell)可以使用您指定的文档编码为您重写XML文件。