2016-05-10 68 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(和底層操作系統語言環境庫)並沒有真正支持這一點。正如您所描述的,如果您在將數據傳遞到數據庫之前對數據進行規範化處理可能是最好的。

相關問題