Я получаю документы 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()
Я нахожу это довольно трудно поверить, что я несколько вручную должны нормализовать каждый текст, который я получаю от указанного внешнего ресурса.