Чтение из формата Windows-1252 из Oracle и запись в файл XML с символами Latin1 в кодировке UTF-8

Я пытаюсь прочитать из базы данных оракула, которая хранит данные в кодировке Windows-1252. Я читаю эти данные с помощью jdbc и записываю в xml-файл с кодировкой UTF-8.

при записи в эти файлы я получаю '?' символы вместо латинских символов, например. вместо í я получаю ?

«Coquí» записывается в XML как «Coqu?»

Я использую этот файл для загрузки в solr позже. Я разместил здесь только соответствующий код, а не весь код, поскольку это длинный метод (устаревший код, который я унаследовал), который сложен.

BufferedWriter result = new BufferedWriter(new FileWriter(OUTPUT_FILE));

                stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_READ_ONLY);
                rst = stmt.executeQuery(sql);
                if (rst.getFetchSize() < 1)
                    return;

                    rst.beforeFirst();

                while (rst.next()) {

                    Profile p = new Profile(); 
                    p.business_name = rst.getString("business_name");
                    p.business_name_sort = rst.getString("business_name_sort");

                      result.write(p.business_name;
                      result.write(p.business_name_sort);

                 }

person Sarthak Dudhara    schedule 27.03.2014    source источник
comment
Где соответствующий код?   -  person fge    schedule 27.03.2014


Ответы (1)


Судя по всему (вы не предоставили нам соответствующий код, поэтому я не могу быть уверен), вы неправильно обрабатываете преобразование набора символов. Java не выполняет никаких автоматических преобразований наборов символов за вас — вы должны сделать это самостоятельно.

Вы можете сделать следующее, чтобы преобразовать его в UTF-8:

String utf8Text = new String(originalText.getBytes("UTF-8"), "UTF-8");

Это предполагает, что originalText является String, содержащим текст, закодированный Windows-1252.

person JonK    schedule 27.03.2014
comment
Спасибо, JonK... Я пытался извлечь соответствующий код, но преждевременно нажав Enter, вопрос был опубликован. Спасибо за ваш ответ - person Sarthak Dudhara; 27.03.2014
comment
Хм, UTF-8 на самом деле не совместим с UTF-16 ... Тот факт, что char является кодовой единицей UTF-16, здесь не имеет особого значения; кодирование/декодирование - person fge; 27.03.2014