使用java解析阿拉伯语/中文/日语rss

时间:2010-12-17 13:33:17

标签: java parsing utf-8 rss character-encoding

我正在用java编写rss feed解析器,我在解析具有arabic / chinese / japanese字符的feed时遇到了问题。 Example feed

当我打印它们时,我只会得到一组问号“?????? ?? ????? ??”。

他们最终进入我的数据库(mysql,由hibernate连接,utf8设置为编码)也是这样。

这部分代码负责从Feed中获取标题:

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;
    }
}

如何将正确的字符输入数据库? 当我从feed中复制它们并将其manulally插入db时就可以了。

感谢名单

更新:
在我的hibernate配置中添加额外的行修复了这个问题:

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

3 个答案:

答案 0 :(得分:3)

您需要在Hibernate配置中更改MySQL JDBC URL以包含以下参数:

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

否则MySQL JDBC驱动程序将使用客户端平台默认编码。

您的数据库编码完全正常,因为手动插入工作显然很好。 XML通常默认解析为UTF-8,因此该部分也很好(除非在XML声明标题中明确指定,否则可能不是这种情况,因为这将是RSS提要服务器的错误)。

答案 1 :(得分:0)

您需要确保数据库的字符编码与此类字符兼容。最有可能的是将其配置为UTF-8。

如果数据库字符编码无法处理字符,则会转换为?。

大多数数据库都有一个总体默认编码,然后允许每个表和每列覆盖。

您还需要确保正确解析传入流(即UTF-8或其指定的任何编码)。

答案 2 :(得分:-1)

这显然是编码问题。 您应该尝试使用UTF-8字符集解码RSS流。