gpt4 book ai didi

java - 如何处理来自外部源的分解 unicode 并将其存储在 postgresql 中

转载 作者:行者123 更新时间:2023-11-29 13:23:59 24 4
gpt4 key购买 nike

我正在接收带有分解变音符号的 UTF-8 格式的 xml 文档。

到目前为止,我只是读取值并将它们保存到我的 postgreSQL 数据库中,而没有进行任何修改或转换(psotgreSQL 参数:SERVER_ENCODING=UTF8,LC_COLLATE=German_Germany.1252)。

现在我发现,当搜索像“Wüste”这样的值时手动输入(十六进制:57 c3 bc 73 74 65),我无法找到之前插入的值外部资源“Wüste”(十六进制:57 75 cc 88 73 74 65)。

在 Notepad++ HexEditor 中查看时,我可以看到这两个字符串不同。

我正在尝试找出解决此问题的正确方法。

目前我会尝试使用 java.text.Normalizer 并尝试在从外部源读取文本时对其进行规范化,如下所示:

String normalized = Normalizer.normalize(original, Normalizer.Form.NFC);

但在此之前,我想确保我没有遗漏任何其他内容。也许我可以而且应该在从外部源读取数据时解决这个问题?也许我需要提供正确的编码?也许我可以设置另一个参数,这样我就不需要自己进行任何标准化?

我正在读取这样的数据:

URL url = new URL(buildSearchUrl(searchCriteria, key));
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
dbf.setNamespaceAware(true);
String expression = "/s:searchRetrieveResponse/s:records/s:record/s:recordData";
DocumentBuilder db = dbf.newDocumentBuilder();
InputStream is = url.openStream();
Document dnbResultDocument = db.parse(is);
Node recordDataElem = (Node) xpath.compile(expression).evaluate(
dnbResultDocument, XPathConstants.NODE);

然后我继续读取不同的节点并使用

获取它们的文本值
element.getTextContent()

我很难相信我必须手动规范化从所述外部资源获得的每个文本。

最佳答案

PostgreSQL(和底层操作系统语言环境库)并不能很好地支持这一点。正如您所描述的,最好在将数据传递给数据库之前对其进行规范化。

关于java - 如何处理来自外部源的分解 unicode 并将其存储在 postgresql 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37143055/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com