2012-09-28 132 views
0

我編寫了一個連接mysql數據庫的php項目。另外我有一個jar文件,它在調用php url時運行。通過PHP我從用戶採取參數,並將其保存到數據庫,之後,我的jar文件連接到數據庫並讀取指定的行。直到這裏一切都好。php從mysql到utf-8的編碼

這是一個運行位於服務器.jar文件我的PHP文件:

<?php 
mysql_query("SET NAMES utf8"); 
header("Content-Type: text/html;charset=UTF-8"); 


echo shell_exec('java -jar /home/path/path/path/my.jar'); 

?> 

和我的jar文件如下:

Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/somedb?useUnicode=true&characterEncoding=UTF-8", "root", "pass"); 
while循環

while (resultSet2.next()) { 


     title2 = new String(resultSet2.getString("title").getBytes("UTF-8"), "UTF-8"); 
     url2 = new String(resultSet2.getString("url").getBytes("UTF-8"), "UTF-8"); 
     id = new String(resultSet2.getString("id").getBytes("UTF-8"), "UTF-8"); 
     date = new String(resultSet2.getString("date").getBytes("UTF-8"), "UTF-8"); 

     list.add(title2); 
     list2.add(url2); 
     list4.add(id); 
     list5.add(date); 


    } 

當我從數據庫中取出某些東西時,everthing完美地工作。我也設置數據庫爲「默認字符集utf8默認collat​​e utf8_general_ci」。

當我用php寫一個土耳其字符時,它保存到分貝,我可以看到。但是,當我嘗試用我的jar來檢索這些土耳其字符時,它只顯示問號。我嘗試了幾乎所有的東西但沒有機會

任何幫助大大appriciated。

編輯:我也在jar文件中將UTF-8更改爲ISO-8859-1。但它不再工作。

+0

[不要使用'SET NAMES'。](http://stackoverflow.com/a/5289141/53114) – Gumbo

回答

0

如果所有的連接設置是否正確,然後

title2 = resultSet2.getString("title") 

...應該是足夠的。這將從數據庫中檢索信息並使用連接設置解釋字符串,然後將其轉換爲Java內部表示形式的UTF-16。當您添加將要將內部字符串轉換爲UTF-8並然後返回這些字節的getBytes(「UTF-8」)時。然後,您將這些字節重新解釋爲UTF-8。

我知道MySQL以配置文件的形式忽略配置文件中的連接選項,因此請嘗試創建新用戶並重新運行它。