无法从我的 XML 中读取 ZÖE、DÉCOR CIARÁN 等字符?
Unable to read characters like ZÖE,DÉCOR CIARÁN etc from my XML?
我有一个大XML。在我的 XML 中有一些像 ZÖE,DÉCOR CIARÁN 这样的角色。我正在使用 Java 和 MarkLogic 作为我的数据库。我无法用这些词阅读我的 XML,当我删除这些词并检查它是否正常工作时。
我的Java代码:
DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT,
DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST);
XMLDocumentManager docMgr = client.newXMLDocumentManager();
DOMHandle xmlhandle = new DOMHandle();
docMgr.read("/" + filename, xmlhandle);
更改的问题:
正如我所说,我无法阅读特殊字符,现在我该如何插入特殊字符,以便在阅读时获得相同的格式。
示例:
当我插入像 CIARÁN AURÉLIE BARGÈME 这样的字符时,它正在保存但是当我阅读时,数据是这样的 CIARAN AURÉLIE BARGEME 但不是插入的。
DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT,
DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST);
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("[^\p{ASCII}]", "");
我正在使用 Normalizer 来读取特殊字符,否则普通的 xmlhandle 就可以了。
根据他们的官方文档:
如果您指定了编码,但结果证明是错误的编码,那么转换结果可能不会如您所愿。
MarkLogic Server 将文本 XML 和 JSON 存储为 UTF-8。在Java中,内存和读取流中的字符都是UTF-16。 Java API 自动将字符与 UTF-8 相互转换。
向服务器写入文档时,您需要知道它们是否已采用UTF-8 编码。如果文档不是 UTF-8,您必须指定其编码,否则您很可能会因为编码不正确而导致数据包含不正确的字符。如果您指定非 UTF-8 编码,Java API 将在写入 MarkLogic 时自动将编码转换为 UTF-8。
https://docs.marklogic.com/guide/java/document-operations#id_11208
我有一个大XML。在我的 XML 中有一些像 ZÖE,DÉCOR CIARÁN 这样的角色。我正在使用 Java 和 MarkLogic 作为我的数据库。我无法用这些词阅读我的 XML,当我删除这些词并检查它是否正常工作时。
我的Java代码:
DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT,
DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST);
XMLDocumentManager docMgr = client.newXMLDocumentManager();
DOMHandle xmlhandle = new DOMHandle();
docMgr.read("/" + filename, xmlhandle);
更改的问题: 正如我所说,我无法阅读特殊字符,现在我该如何插入特殊字符,以便在阅读时获得相同的格式。
示例: 当我插入像 CIARÁN AURÉLIE BARGÈME 这样的字符时,它正在保存但是当我阅读时,数据是这样的 CIARAN AURÉLIE BARGEME 但不是插入的。
DatabaseClient client = DatabaseClientFactory.newClient(IP, PORT,
DATABASE_NAME, USERNAME, PWD, Authentication.DIGEST);
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("[^\p{ASCII}]", "");
我正在使用 Normalizer 来读取特殊字符,否则普通的 xmlhandle 就可以了。
根据他们的官方文档:
如果您指定了编码,但结果证明是错误的编码,那么转换结果可能不会如您所愿。
MarkLogic Server 将文本 XML 和 JSON 存储为 UTF-8。在Java中,内存和读取流中的字符都是UTF-16。 Java API 自动将字符与 UTF-8 相互转换。
向服务器写入文档时,您需要知道它们是否已采用UTF-8 编码。如果文档不是 UTF-8,您必须指定其编码,否则您很可能会因为编码不正确而导致数据包含不正确的字符。如果您指定非 UTF-8 编码,Java API 将在写入 MarkLogic 时自动将编码转换为 UTF-8。
https://docs.marklogic.com/guide/java/document-operations#id_11208