在 OxygenXML 中打开包含特殊字符的 DITA 文件时遇到问题

问题描述

我在打开包含 é、è、ë、ê、à、á、ö 等特殊字符的文件时遇到问题。我从 OxygnXML 得到的错误消息是:

 File encoding (UTF8) does not support all characters from the current file.
 To ignore these errors or to replace invalid characters follow the link below to change the "Encoding errors handling" option value from REPORT to IGnorE or REPLACE. 

奇怪的是:当我更改文件时(例如,通过将 'ó' 交换为 'o'),我可以在 OxygenXML 和 FontoXML 中导入文件。之后我可以再次更正它们并保存文件。但是我看不出原始文件修改后的文件有什么区别。

这是原始文件

 <p id="id-9f3a1788-a751-4f48-ed9c-9e19447ad3b0">Ze is zó zenuwachtig,dat ze bijna aan de ... moet .</p>

这是保存的更正文件(来自 FontoXML,在这种情况下 - 只是为了显示添加的说明):

 <p id="id-9f3a1788-a751-4f48-ed9c-9e19447ad3b0">Ze is
                    z<?fontoxml-change-addition-start author-id="erik.verhaar" change-id="6f6bb382-3d43-4c5b-b35f-f857d729cf22" timestamp="1627473671530"?>ó<?fontoxml-change-addition-end change-id="6f6bb382-3d43-4c5b-b35f-f857d729cf22"?><?fontoxml-change-deletion author-id="erik.verhaar" change-id="0296c77c-863b-421f-bf5c-c0901c7a2751" text="ó" timestamp="1627473669483"?>
                    zenuwachtig,dat ze bijna aan de ... moet .</p>

原来的ó和修正后的ó有什么区别?以及如何更改我的原始文件以便将它们导入 OxygenXML 中?

谢谢!!

解决方法

文本文件(例如 XML)使用字节保存在磁盘上,它们使用字符进行编辑和呈现。编码负责在打开文档时将字节转换为字符(有时将多个字节转换为字符),并在保存文档时再次将字符转换为字节。 有许多编码,但最流行的(如 UTF-8)字符属于 0-128 ASCII 范围,如 a-z A-Z,通常保存为单个字节。超出范围的字符,例如 e-acute (é) 通常会保存为多个字节,具体取决于用于保存的编码。

当打开一个 XML 文档时,Oxygen 尝试了解使用什么编码来读取它。如果 XML 文档有这样的标题:

Oxygen 使用标题中指定的编码。如果 XML 文档缺少标题 Oxygen 将回退到 UTF-8。在检测 XML 文件的编码时,Oxygen 基本上实现了 XML 规范: https://www.w3.org/TR/xml/#sec-guessing

在您的情况下,Oxygen 检测到编码为 UTF-8,并开始使用 UTF-8 将字节转换为字符。它遇到了未使用 UTF-8 编码的字节序列。 Oxygen 不会继续加载文件,因为在这种情况下,您可能会在将其保存回来时得到损坏的内容。

在我看来,您用来创建 XML 文件的其他编辑器工具不支持 XML,它实际上并未将 XML 保存为 UTF-8,即使 XML 文档中的标题指定了这一点。 我们实际上并不知道其他编辑工具用于保存 XML 的编码,您可以尝试的一件事是在其他编辑工具中重新打开 XML 文档并更改其编码标题声明:

<?xml version='1.0' encoding='UTF-8'?>

到:

<?xml version='1.0' encoding='CP1250'?>

因为我怀疑其他编辑工具实际上用于保存 XML 文档的默认平台编码,在 Windows 上通常应该是 CP1250。 然后将 XML 文档保存在其他编辑工具中并尝试在 Oxygen 中重新打开它,如果它有效,请将其标题编码声明更改回 UTF-8 并将 XML 文档保存在 Oxygen 中,以便使用 UTF- 正确保存它8 编码。

我制作的这组关于 XML 编码的旧幻灯片可能对您也有用: https://www.oxygenxml.com/events/2018/large_xml_documents.pdf

相关问答

Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其...
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。...
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbc...