2011-07-01 26 views
1

我的DB2數據庫正在使用UTF-8編碼。源表中有一個科拉姆使用UTF-8文本像下面

希臘這些行:Μπορώναφάωσπασμέναγυαλιάχωρίςναπάθωτίποτα
捷克:莫湖JIST SKLO,neublížíMI
塞爾維亞:Јамогудаједемстакло

我的Java代碼就是做這個(..剪斷不相關的部分。)
如何使用JDBC查詢UTF-8數據庫

ResultSet rs = stmt.executeQuery("SELECT SAMPLE_TEXT FROM UNICODE_TEST"); 
File file = new File("Unicode.txt"); 
BufferedWriter outFile = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(file),"UTF8")); 
while (rs.next()) { 
    outFile.write(rs.getString("SAMPLE_TEXT")); 
    outFile.write("\n"); 
} 

在我的文件中的結果看上去並不像那些在源表都沒有。 我得到這個代替

希臘:ΜποÏώναI†Î¬Ï‰ÏƒÏ€Î±ÏƒÎ¼ÎναγÏ......我±I»Î¹Î¬Ï‡Ï‰III,ναI€Î ¬Î¸Ï‰I「II€Î¿Ï「I±
捷克:莫湖JAST SKLO,neublÞÃMI
塞爾維亞語:DD°Ð¼Ð¾Ð³ÑƒÐ'аÑ~ÐμÐ'ÐμмÑÑ,акло

我錯過了什麼?

+0

我不知道您是否使用nvarchar而不是varchar的DB2等價物。也許你得到的輸出沒有編碼,你需要使用String類自己重新編碼它(並將列讀作字節數組)。還要檢查是否需要將某些參數設置到db2數據庫以使用UTF-8。 – Luciano

+0

@盧西亞諾。數據庫是UTF-8。該列是一個varchar(200)。我知道內容是UTF-8,因爲我可以使用一個支持unicode的sql查詢工具來檢索它,並且它完全如我所料。 – user754425

+0

你用什麼程序查看生成的文件? – david

回答

2

您的Java代碼沒問題。你確定你的文件內容有誤嗎?例如,如果您的終端出現問題,您所看到的內容可能會顯示錯誤。你能看到該電腦中的其他文本文件編碼爲UTF-8嗎? (如果您不確定,請以六角形閱讀,獲得od的轉儲等)。如果您確定這不是您的問題,那麼我會指向JDBC連接中的一些charset編碼設置(對DB2沒有經驗)。

+1

你是對的。我在Notepad ++的一個選項卡中打開了UTF-8的原始文本。 java結果集在另一個選項卡中,但是,concoding被設置爲ANSI,因此出現亂碼 – user754425

0

我不知道你在用什麼數據庫,但是如果是MySQL的話,可以嘗試在你的連接字符串中添加characterEncoding=UTF-8

相關問題