【问题标题】:Notepad++ opening files containing En dash characterNotepad++ 打开包含短划线字符的文件
【发布时间】:2016-08-31 23:46:34
【问题描述】:

我有两个内容相同的文件。一个文件具有 XML 扩展名,另一个文件具有 txt。这两个文件都以 ASCII 编码。它们都包含破折号字符(十六进制值 96)。

当我打开带有 txt 扩展名的文件时,文件会按预期显示。短划线正确显示为破折号。

但是,当我打开 XML 文件时,En dash 字符以反转的前景色/背景色显示为 x96。

xml 文件的这种显示是否与它是 ASCII 编码文件但文件包含以下事实有关:

为什么字符显示不正确?当我对 XML 文件进行十六进制编辑时,我看到 En dash 是十六进制值 96,它仍在扩展的 ASCII 表中。

文件示例:

<?xml version="1.0" encoding="UTF-8"?>
<x>Plug &amp; Play ֠No wire splicing necessary</x>

破折号在“播放”之后并在“否”之前。请注意前导和尾随空格。

【问题讨论】:

  • 使用 Microsoft 的记事本打开并正确显示相同的 XML 文件。如果从记事本中我使用 UTF-8 编码保存 XML 文件,则可以使用 Notepad++ 正确打开和显示生成的文件。我会进一步观察到,在 Notepad++ 中打开 ASCII XML 文件,然后执行 Encoding > Encode in UTF-8,或 Encoding > Convert to UTF-8 对文件的显示方式没有影响。
  • 你在使用 Notepad++ 的 XML 插件吗?
  • @TimBiegeleisen 我观察到使用带有 Notepad++ 的 XML 工具的行为与安装没有任何 XML 相关插件的 Notepad++ 的行为相同。
  • 对不起。问题本身不存在的内容不存在。如果异地位置不可用(离线、移动、删除等),那么这个问题对这里的未来读者来说就失去了价值。如果您无法在此处提供我们重现问题所需的详细信息,则该问题需要作为不可重现而关闭。
  • 链接是否有效现在是无关紧要的。重要的是,当未来的读者在这里寻找问题的解决方案时,该链接在下个月、明年或五年后是否有效。问题需要在问题本身中包含所有相关内容

标签: notepad++


【解决方案1】:

您正在创建一个无效的 XML 文件。我认为在这种情况下,编辑的正确行为并没有被普遍接受。记事本将其解释为文本文件。 Notepad++ 试图将其解释为有效的 XML 文件并指出问题。

如果您使用“打开”对话框,记事本成功的原因是您告诉它文件的编码:“ANSI”。如果您使用拖放或其他方式,它要么猜测显然足够接近的编码,要么总是使用“ANSI”。

Notepad++ 可以为您提供更多帮助,因为它不仅仅是一个通用的文本编辑器。它将文件解释为 XML 文件(可能基于扩展名)。

XML 文档可选地指示用于其字节表示的编码。您正在将文件编写为某种 ANSI 编码(可能是 Windows-1252),但将其标记为 UTF-8。这需要 XML 处理器使用 UTF-8。 (由于编码的相似性,程序可以使用猜测的编码进行读取以找到指示的编码并使用该编码再次读取文档。)

您在这里很幸运,因为您的数据实际上显示为无效,而不是错误的编码导致了乱码的静默错误。 UTF-8 不会产生或允许具有 0-255 值的任意序列字节。只有当它是编码某些 Unicode 代码点的字节序列和模式的一部分时,才允许使用 0x96。简单地说,该文件不是有效的 UTF-8。 Notepad++ 突出显示证明这一点的字节。如果以 UTF-8 格式读取文件的尝试成功但产生了意想不到的结果,那么您将很不幸。

解决方案是将指示的编码与实际的编码相匹配。通常,XML 库具有为您执行此操作的编写器函数。问题是您使用的编写器不知道并且您实际上不知道您正在使用哪种“ANSI”编码。您似乎还要求不使用 UTF-16。也许你应该对你可以使用什么得到一个积极的陈述。如果您使用后处理步骤,许多工具(例如 PowerShell)可以使用您指定的文档编码为您重写 XML 文件。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2014-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-07-24
    • 1970-01-01
    • 2013-09-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多