Разбор арабских / китайских / японских RSS-каналов с Java - PullRequest
1 голос
/ 17 декабря 2010

Я пишу синтаксический анализатор RSS-канала с использованием Java и столкнулся с проблемой при синтаксическом анализе канала с арабскими / китайскими / японскими символами. Пример подачи

Когда я их печатаю, я просто получаю наборы вопросительных знаков "?????? ?? ????? ??".

Они попадают в мою базу данных (mysql, подключенный с помощью hibernate, в качестве кодировки установлен utf8) тоже так.

Это часть кода, которая отвечает за получение заголовка из ленты:

DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder db = dbf.newDocumentBuilder();

Document doc = db.parse(url.openStream());
doc.getDocumentElement().normalize();

Node channelNode = doc.getElementsByTagName("channel").item(0);

NodeList channelList = channelNode.getChildNodes();

for (int i = 0; i < channelList.getLength(); i++) {
    Node element = channelList.item(i);

    String name = element.getNodeName();

    if (name.equalsIgnoreCase("title")) {
     rssName = element.getTextContent();
     break;
    }
}

Как получить правильные символы в базе данных? Когда я копирую их из канала и вставляю вручную в базу данных, все в порядке.

Thanx

UPDATE:
Добавление дополнительных строк в мой конфигурационный файл hibernate устранило проблему:

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

Ответы [ 3 ]

3 голосов
/ 17 декабря 2010

Необходимо изменить URL-адрес MySQL JDBC в конфигурации Hibernate, включив в него следующие параметры:

jdbc:mysql://hostname:3306/db_name?useUnicode=yes&characterEncoding=UTF-8

В противном случае драйвер JDBC MySQL будет использовать кодировку по умолчанию для платформы клиента.

Ваша БДКодирование полностью в норме, так как ручная вставка работает нормально.XML обычно по умолчанию анализируется как UTF-8, так что с этой частью тоже все в порядке (если явно не указано иное в заголовке объявления XML, что, скорее всего, не так, поскольку это будет ошибкой сервера RSS-каналов).

0 голосов
/ 17 декабря 2010

Это явно проблема кодирования.Вы должны попытаться декодировать поток RSS, используя кодировку UTF-8.

0 голосов
/ 17 декабря 2010

Необходимо убедиться, что кодировка символов базы данных совместима с такими символами. Скорее всего, настроив его на UTF-8.

Если кодировка символов базы данных не может обработать символ, она преобразуется в?.

Большинство баз данных будут иметь общую кодировку по умолчанию, а затем разрешать переопределения для каждой таблицы и для каждого столбца.

Вам также необходимо убедиться, что вы правильно анализируете входящий поток (т. Е. Как UTF-8 или любую другую кодировку).

...