如何使用 JavaApi 将 XML 中的重音字符写入 MarkLogic?

Posted

技术标签:

【中文标题】如何使用 JavaApi 将 XML 中的重音字符写入 MarkLogic?【英文标题】:How to write accented characters from XML into MarkLogic using JavaApi? 【发布时间】:2015-05-12 08:38:35 【问题描述】:

我有一个 20MB 的 XML,其中包含 Ö、É、Á 等重音字符。这里的问题是,当我将文件插入 MarkLogic 时,这些字符以 O 等英文格式保存,E,A.but 我想以相同的格式存储。那么我怎样才能以重音格式存储字符并以相同的方式读取 XMl。我的 XML 文件是 ISO-8859-1 编码的。

我为写作和阅读而编写的代码:

     DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT,
        DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST);
    XMLInputFactory factory = XMLInputFactory.newInstance();
    XMLStreamReader streamReader = null;
    streamReader = factory.createXMLStreamReader(new FileReader("record.xml"));
    XMLDocumentManager xmlDocMgr = client.newXMLDocumentManager();
    XMLStreamReaderHandle handle = new XMLStreamReaderHandle(streamReader);
    xmlDocMgr.write("/" + filename, handle);    

用于读取 XML:

 XMLDocumentManager docMgr = client.newXMLDocumentManager();
 DOMHandle xmlhandle = new DOMHandle();
docMgr.read("/" + filename, xmlhandle);
String doc = xmlhandle.toString();
String data = Normalizer.normalize(doc, Normalizer.Form.NFD).replaceAll("[^\\pASCII]", "");
return data;

我正在返回数据以在浏览器中显示。 无法找到问题所在。

【问题讨论】:

为什么不保存为 UTF-8? @JoopEggen ,有很多这样的 XMl 文件在 ISO 中编码。所以我无法更改。 【参考方案1】:

如果 XML 文件没有声明其编码的 XML 序言,则在将文件写入数据库之前读取文件时应指定 ISO-8859-1 编码(正如 flafoux 指出的那样)。

您还应该在从数据库中读取内容时指定编码,除非目的地接受 UTF-8 编码。

有关详细信息,请参阅:

http://docs.marklogic.com/guide/java/document-operations#id_11208

希望对您有所帮助,

【讨论】:

【参考方案2】:

您需要指定编码(还需要使用InputStream 更改构造函数):

XMLStreamReader streamReader = factory.createXMLStreamReader(new FileInputStream("record.xml"),"ISO-8859-1");

【讨论】:

我指定了编码,但它仍然以英文格式保存。

以上是关于如何使用 JavaApi 将 XML 中的重音字符写入 MarkLogic?的主要内容,如果未能解决你的问题,请参考以下文章

带有重音符号的 XML 字符编码问题

如何从 .NET 中的字符串中删除变音符号(重音符号)?

如何从 .NET 中的字符串中删除变音符号(重音符号)?

如何将带有无效字符(重音)的 Pandas 数据框与数组匹配? [复制]

带有 php 和重音字符以及 ENT_XML1 的 XML 的 UTF-8 编码

使用 .NET 如何将包含 Latin-1 重音字符的 ISO 8859-1 编码文本文件转换为 UTF-8