2016-05-10 12 views
1

Я получаю документы xml в UTF-8 с разложенными диакритиками.Как работать с разложенным юникодом из внешнего источника и хранить его в postgresql

До сих пор я просто считывал значения и сохранял их в своей базе данных postgreSQL без каких-либо изменений или преобразований (параметры psotgreSQL: SERVER_ENCODING = UTF8, LC_COLLATE = German_Germany.1252).

Теперь я обнаружил, что при поиске значения, как «Wüste» вводить его вручную (HEX: 57 c3 Ьс 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 (и библиотеки локали операционной системы) не очень хорошо это поддерживает. Вероятно, лучше всего, если вы нормализуете свои данные, прежде чем передавать их в базу данных, как вы описали.

 Смежные вопросы

  • Нет связанных вопросов^_^