Почему символы Юникода правильно отображаются в базе данных, а как? при печати в Java через Hibernate? - PullRequest
2 голосов
/ 09 апреля 2010

Я пишу веб-приложение и взаимодействую с MySQL, используя Hibernate 3.5. Используя «デ ス ク ト ッ プ ინგლისური» в качестве моей тестовой строки, я могу ввести строку и убедиться, что она правильно сохраняется в базе данных. Однако когда я позже извлекаю значение из базы данных и печатаю на консоли в виде строки, я вижу «?????? ?????????». Если я использую

new OutputStreamWriter(System.out,"UTF-8");

тогда я получаю "É„ Ç „„ „„ „„ „„ · · · · · · · · · · · · · · "" "" "" "" "" "". исходная строка?

Это мои настройки hibernate.cfg.xml:

<property name="hibernate.connection.useUnicode">
    true
</property>
<property name="hibernate.connection.characterEncoding">
    UTF-8
</property>
<property name="hibernate.connection.charSet">
    UTF-8
</property>

и это моя строка подключения к базе данных:

hibernate.connection.url = jdbc:mysql://localhost/mydatabase?autoReconnect=true&amp;useUnicode=true&amp;characterEncoding=UTF-8

Ответы [ 2 ]

1 голос
/ 09 апреля 2010

Это консоль, которая не настроена на использование UTF-8 до отображения их. В случае Eclipse вы можете настроить его кодировку с помощью Окно> Параметры> Общие> Рабочая область> Кодировка текстовых файлов . Должно быть установлено значение UTF-8.

new OutputStreamWriter(System.out,"UTF-8"); только указывает OutputStreamWriter, какую кодировку использовать для преобразования записанных символов в байты. Он не указывает консоли System.out, какую кодировку использовать для преобразования их из байтов в символы в , отображать их.

0 голосов
/ 09 апреля 2010

Может быть, проблема в вашем драйвере JDBC?Попробуйте использовать другой, посмотрите, сохраняется ли проблема.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...