2016-05-10 29 views
1

我正在接收UTF-8中的xml文档,其中分解的diacretics。直到现在,我只是读取这些值并将它们保存到我的postgreSQL数据库中,而没有做任何修改或转换(psotgreSQL参数:SERVER_ENCODING = UTF8,LC_COLLATE = German_Germany.1252)。如何处理来自外部源的分解的unicode并将其存储在postgresql中

现在我发现,当搜索对于喜欢“Wüste”的值时手动输入它(HEX:57 C3 BC 73 74 65),我无法找到以前从外部资源“Wüste插入的值“(HEX: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() 

我觉得有点困难,我有点手动相信必须对从外部资源获得的每篇文本进行标准化。

回答

1

PostgreSQL(和底层操作系统语言环境库)并没有真正支持这一点。正如您所描述的,如果您在将数据传递到数据库之前对数据进行规范化处理可能是最好的。

相关问题