如何使用 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?的主要内容,如果未能解决你的问题,请参考以下文章
如何将带有无效字符(重音)的 Pandas 数据框与数组匹配? [复制]