【问题标题】:MarkLogic Content Pump , content_encoding encoding="US-ASCII"?MarkLogic 内容泵,content_encoding encoding="US-ASCII"?
【发布时间】: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


【解决方案1】:

感谢 grtjn 的回复。

-xml_repair_level 完全工作,所有记录现在都已提交,没有失败的记录。

特殊字符(带;)用真实字符存储在ML中,如下所示

  • &lambda - λ
  • &Aring - Å
  • &mu - μ

我希望从业务角度来看,这应该是可接受的内容。

现在唯一的主要挑战是在数百万条 xml 记录中使用乱码进行测试。

感谢 grtjn 的帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-12
    • 1970-01-01
    • 2013-08-05
    • 2016-03-30
    • 1970-01-01
    • 2011-06-20
    相关资源
    最近更新 更多