2014-01-12 41 views
0

我編寫了一個Android應用程序,用於管理要在MySQL數據庫(在服務器上)存儲和刪除的數據。每當在智能手機上使用特殊字符(「ä」,「ü」,...)時,該符號將被嚴重轉換。Android,JSon和PHP之間的UTF-8編碼問題

在日誌中,我可以看到「變音符號」(例如「ä」)被正確傳送。我在PHP文件「SET NAMES‘UTF-8’」也使用,在這裏看到:

function connect() 
{ 
    .... 

    // Connecting to mysql database 
    $con = mysql_connect(DB_SERVER, DB_USER, DB_PASSWORD) or die(mysql_error()); 

    mysql_query("SET NAMES 'utf8'"); 

    // Selecting database 
    $db = mysql_select_db(DB_DATABASE) or die(mysql_error()) or die(mysql_error()); 

    return $con; 
} 

如果我開始通過郵差的請求,我可以用特殊的字符,例如添加單詞「TÄST」,json響應如下所示:

{"catId":"35","category":"T\u00c4ST"} 

因此,單詞已轉換爲UTF-8。但是,如果我通過智能手機添加一個項目,從服務器的響應(檢索添加的項目)是這樣的:

{"catId":"37","category":"T?ST"} 

在我的代碼,在這裏我想補充的參數爲JSON對象的位置是(注意,「名」是編輯文本字段的字符串內容):

List<NameValuePair> params = new ArrayList<NameValuePair>(); 
... 
params.add(new BasicNameValuePair("category", catName)); 

,此前的HTTPRequest是派:

JSONObject json = jsonParser.makeHttpRequest(url_dest, "POST", params); 

如果我打印出來的PARAMS單詞「TAST」可見......布不幸的是,我無法檢查哪個json字符串到達​​服務器(由於我的PHP知識欠佳)。那麼問題在哪裏?在我的android應用程序或位於服務器上的PHP文件?

我是否必須以任何方式對傳出的json對象進行編碼?

非常感謝您的幫助。

回答

0

要在Eclipse上進行調試,我建議您: http://projects.eclipse.org/projects/tools.pdt 這是很容易配置。

控制DB中的編碼;也許VARCHAR默認latin1_swedish_ci不能保存該字符串。

另一種方式來解決這個問題,可以尋找到apache公地:特別 http://commons.apache.org/proper/commons-lang/javadocs/api-2.6/org/apache/commons/lang/StringEscapeUtils.html 所提供的功能:escapeHtml4和unescapeHtml4

+0

非常感謝提示!但不幸的是我的PHP文件運行在遠程服務器(bplaced.net)上,是否可以在那裏調試?我沒有這方面的線索。 – dafocus

+0

是的,但它有點複雜。您應該遠程安裝xdebug並使用Eclipse PDT。 我認爲這是一個很好的指導: http://bogdan-albei.blogspot.it/2010/06/php-remote-debugging-with-xdebug-and.html – madx

0

@dafocus,如果你設置你的Android應用項目,以UTF-8編碼你的IDE,它應該確保在應用程序中正確處理UTF-8。它看起來像編碼改變的地方。如果整個編碼爲UTF-8,則可能根本不需要將TÄST轉換爲T\u00c4ST。 PHP以前用charsets很難。我建議你看一下PHP來確定處理程序頁面是否導致了這個(可能的)和/或DB - 就像@madx剛纔所說的那樣。