Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/316.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
用java解析阿拉伯文/中文/日文rss源_Java_Parsing_Utf 8_Rss_Character Encoding - Fatal编程技术网

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

用java解析阿拉伯文/中文/日文rss源,java,parsing,utf-8,rss,character-encoding,Java,Parsing,Utf 8,Rss,Character Encoding,我正在用java编写rss提要解析器,在解析包含阿拉伯语/汉语/日语字符的提要时遇到了一个问题 当我打印它们时,我只会得到一组问号“?????????” 它们最终进入我的数据库(mysql,由hibernate连接,将utf8设置为编码),也是这样 这是负责从提要获取标题的代码部分: DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance(); DocumentBuilder db = dbf.newDocumentBuil

我正在用java编写rss提要解析器,在解析包含阿拉伯语/汉语/日语字符的提要时遇到了一个问题

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

它们最终进入我的数据库(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;
    }
}
DocumentBuilderFactory dbf=DocumentBuilderFactory.newInstance();
DocumentBuilder db=dbf.newDocumentBuilder();
documentdoc=db.parse(url.openStream());
doc.getDocumentElement().normalize();
节点channelNode=doc.getElementsByTagName(“通道”)。项(0);
NodeList channelList=channelNode.getChildNodes();
对于(int i=0;i
如何将正确的字符输入数据库? 当我从提要中复制它们并手动插入数据库时,就可以了

塔克斯

更新:
在我的hibernate配置中添加其他行修复了此问题:

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

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

如果数据库字符编码不能处理字符,它将转换为

大多数数据库都有一个整体默认编码,然后允许每表和每列重写


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

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

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

jdbc:mysql://hostname:3306/db_name?useUnicode=yes&characterEncoding=UTF-8 jdbc:mysql://hostname:3306/db_name?useUnicode=yes&characterEncoding=UTF-8 否则,MySQL JDBC驱动程序将使用客户端平台默认编码


您的DB编码是完全好的,因为手动插入显然很好。默认情况下,XML通常被解析为UTF-8,因此该部分也可以(除非在XML声明头中明确指定,否则情况可能并非如此,因为这可能是RSS提要服务器的错误)

您是否安装了打印这些字符的字体?@rubenvdg:如果没有这些字符的字体,您可能会看到带有黑色边框的空白白色方块,或者在特定的应用程序(某些网络浏览器)中看到,当然不是问号。@BalusC:我想这取决于上下文,如果我没有弄错的话,linux终端窗口在某些情况下会显示问号。无论如何,不要介意我的评论,我错过了关于“手动插入”的最后一句话。是的,你是对的,我在hibernate配置中没有:)我在hibernate.cfg.xml中已经有了这些行,我的问题没有得到解决。我用这个例子->不,他不应该。如果在XML头中指定了不同的字符集,强制XML解析器使用UTF-8肯定会损坏数据。