2010-12-17 15 views
1

私は、JavaとRSSフィードパーサーを書いているとフィードおよび/アラビア中国語/日本語の文字を持っているフィードを解析している間、私は問題が発生しました。解析アラビア/中国語/日本語RSSは、java

私はちょうど「?????? ?? ????? ??」疑問符のセットを取得し、それらを印刷しExample feed

彼らはまた、そのように(mysqlの、休止状態で接続され、エンコーディングとして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; 
    } 
} 

データベースに適切な文字を取得する方法は? 私はそれらをフィードからコピーし、データベースに人手で挿入します。

ありがとう

UPDATE


は、問題を修正私の休止状態の設定に追加の行を置く:

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

これらの文字を印刷するにはフォントがインストールされていますか? – rvdginste

+0

@rubenvdg:これらの文字のフォントがない場合は、黒い枠線で囲まれた空の白い四角や、特定のアプリケーション(Webブラウザなど)で[ユニコード置換文字](http://www.fileformat.info/info /unicode/char/fffd/index.htm)、確かに疑問符ではありません。 – BalusC

+0

@BalusC:私はそれが文脈に依存すると思った、私が間違っていなければ、Linuxのターミナルウィンドウはある場合には疑問符を表示するだろう。いずれにしても、私の発言は気にしないで、「手動で挿入する」という最後の文を忘れてしまった。 – rvdginste

答えて

3

次のparams含まれるようにHibernate設定でMySQLのJDBC URLを変更する必要があります。そうしないとMySQLのJDBCドライバは、クライアントプラットフォームのデフォルトエンコーディングを使用します

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

を。

DBのエンコーディングは、手動による挿入がうまくいくので完全に問題ありません。 XMLは通常、デフォルトではUTF-8として解析されるので、XML宣言ヘッダーに明示的に指定されていない限り、RSSフィードサーバーの間違いである可能性が高いため、この部分もうまくいきます。

+0

ええ、あなたは正しかった、私は冬眠の設定でそれを持っていなかった:) – darkhie

+0

あなたはようこそ。 – BalusC

+0

私は既にhibernate.cfg.xmlにこれらの行がありますが、私の問題は解決されていません。この例を使用します - > http://www.mkyong.com/spring-mvc/spring-3-mvc-and-rss-feed-example/ –

0

あなたはデータベースの文字エンコーディングは、このような文字と互換性があることを確認する必要があります。おそらくUTF-8に設定することによって可能性があります。

データベースの文字エンコーディングは、文字を扱うことができない場合は、に変換されます?。

ほとんどのデータベースでは、全体のデフォルトのエンコーディングを持っているし、テーブルごとに、列のオーバーライドごとにできるようになります。

また、あなたは(すなわち、UTF-8または何でもエンコーディングそれが指定するもの)を正しく受信ストリームに解析していることを確認する必要があります。

-1

明らかにエンコードの問題です。 UTF-8文字セットを使用してRSSストリームをデコードしようとする必要があります。

+0

いいえ、彼はすべきではありません。 XMLヘッダーに異なる文字セットが指定されている場合、XMLパーサにUTF-8を使用させると、データが破損する可能性があります。 – jarnbjo

関連する問題