Извлечение clob Java с использованием getString - проблема с кодировкой символов

Итак, у меня есть база данных с таблицей, одной из записей которой является «é€áí», и я знаю, что это правильно в базе данных. Он хранится как clob.

В Java я получаю запись следующим образом:

String text = resultSet.getString(DBConstants.COL_NOTE_TEXT);

При отладке текст равен 'é€áí', а при отображении на экране символ евро представляет собой квадратный блок.

Кто-нибудь видел это раньше? Какие-либо предложения?

Заранее спасибо.


person Ed .    schedule 01.12.2009    source источник
comment
Это интересно, поскольку символ U+0080 является символом Unicode ‹control› (поэтому неудивительно, что он не печатается). Символ евро на самом деле U + 20AC. У меня нет реальных идей о том, почему это может происходить, но это может дать вам некоторые подсказки...   -  person Andrzej Doyle    schedule 01.12.2009
comment
ЗАБЫЛ упомянуть - я знаю, что \ u0080 - это символ евро, но почему он просто не был преобразован в символ евро. Если я сделаю text.replaceAll(€, €), все будет хорошо. Но почему я должен? Ваше здоровье.   -  person Ed .    schedule 01.12.2009
comment
Ох, хорошо! Мне показалось, что я где-то читал, что это символ евро... хорошо, еще больше запутался!   -  person Ed .    schedule 01.12.2009
comment
Как узнать, правильно ли он записан в БД? В частности, я видел довольно странное поведение, когда текст, вставленный с использованием какого-то странного механизма, на самом деле будет отображаться правильно, когда вы попытаетесь просмотреть его непосредственно в БД, в зависимости от того, как вы его настроили. Например, если вы установите для своего клиента NLS_LANG значение UTF8 и просматриваете данные с помощью клиента (в моем случае PL/SQL Developer 6.5), который не поддерживает UTF-8, он может выглядеть правильно, даже если это не так.   -  person Dan    schedule 01.12.2009
comment
А также, какой драйвер JDBC вы используете и какую версию базы данных?   -  person Dan    schedule 01.12.2009
comment
Спасибо за вашу помощь. Вы можете быть правы, кто-то использовал SQL Developer для проверки записи и был возвращен правильно. Не уверен, что клиент установил NLS_LANG, постараюсь выяснить. Diver — это «oracle.jdbc.driver.OracleDriver», версия — 10g, кодировка — win1252.   -  person Ed .    schedule 01.12.2009
comment
Подождите... ваша кодировка базы данных — Windows-1252?   -  person Dan    schedule 01.12.2009
comment
Да, у нас также есть UTF-8, с которым мы пытаемся протестировать его, хотя нам нужно создать схемы. Следует ли этого ожидать, если кодировка символов Windows-1252?   -  person Ed .    schedule 01.12.2009


Ответы (2)


0080 — символ евро в западной кодировке Windows (cp-1252); в Юникоде это 20AC. Вы можете проверить кодировку ввода. Еще одна вещь, которую нужно проверить, это то, что экран может отображать символ евро. Если он отобразит '\ u20AC', на эту часть будет дан ответ.

person Kathy Van Stone    schedule 01.12.2009
comment
Опереди меня, я только что написал это. :-П - person Andrzej Doyle; 01.12.2009
comment
Проблема может заключаться в том, что БД хранит данные cp1252 (в этом случае вы меняете тип Java на BLOB), или это может быть связано с передачей данных (которые должны быть закодированы в байты). - person Kathy Van Stone; 01.12.2009

Видеть:

oracle-jdbc-euro-character

Подумай, это моя проблема. Спасибо за помощь.

person Ed .    schedule 02.12.2009