我正在接收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()
我覺得有點困難,我有點手動相信必須對從外部資源獲得的每篇文本進行標準化。