【发布时间】:2019-03-04 13:41:54
【问题描述】:
MarkLogic 安装在 Windows 10 机器上。
我们正在使用 MarkLogic Content Pump (MLCP) 来导入数据
它与
配合得很好<?xml version="1.0" encoding="UTF-8"?>
导入非 UTF8 编码时显示错误,即
<?xml version="1.0" encoding="US-ASCII"?>
我查看了 MLCP 指南,发现 content_encoding 参数,但它不起作用,并且记录包含特殊字符(如 ´ δ、“ & 等)的抛出错误
错误 mapreduce.ContentWriter:XDMP-DOCENTITYREF:无效的实体引用“gamma”
我是这样传递的
mlcp.bat -content_encoding "US-ASCII"
当我查看 this document 时,它说“仅支持 UTF-8。”
当我查看this 时,它说“选项值必须是您的 JVM 接受的字符集名称;”
所以我很困惑,不知道如何解决这个问题以及如何在 JVM 中设置字符集
【问题讨论】:
-
如果您的 XML 文档包含
δ等字符,那么您的编码不是 US-ASCII。如果您声明它是 ASCII(单字节字符集),然后包含诸如δ之类的内容,它是一个多字节字符,则 XML 解析器会将每个字节作为一个单独的字符读取,您将得到损坏的垃圾和潜在的对于这类错误。 -
感谢 MH 的回复。我正在处理包含数十万个文件的遗留系统,其中字符集被称为 US-ASCII 并且我无法更改源,一种选择是在摄取期间使用转换内容,但我想避免转换并希望 MLCP 提供更简单的解决方案
-
XML 标头中的编码听起来不可靠。在这种情况下,很难做到正确。你可以试试
windows-1252,这是 Windows 中非常典型的编码。如果这也失败了,您可以通过启用 `-xml_repair_level full` 选项让 MarkLogic 进行猜测。不过,我建议您仔细检查结果,最终可能会出现乱码,尤其是像您提到的变音符号和特殊字符。 -
感谢 grtjn 的回复,-xml_repair_level 完全正常工作,我可以导入带有特殊字符的文件集。需要检查更多
-
MLCP 为 xml 成功运行,我们创建了一个小应用程序来测试是否摄取了所有正确的字符。它不是,例如&戒指; - Ã… 和 ö - ¶ 而不是 Å 和 ö 分别。如果我能够以某种方式在 MarkLogic XML 中摄取实体本身,而不是实际字符,那么我认为浏览器将管理显示正确的实体。
标签: import marklogic mlcp xml-encoding