2012-11-15 23 views
0

假設有人使用這封信:ë。他們將其輸入到EditText Box中,並將其正確存儲在MySQL數據庫中(通過php腳本)。但是爲了使那個特殊字符的數據庫字段在Java/Android中導致輸出爲「null」。從MySQL輸出國際字符到Java/Android

看來我的數據庫已正確設置和存儲。但檢索是問題。我需要在PHP端修復這個問題還是在Java/Android中處理它? 編輯我不認爲這與PHP方面有任何關係,所以我對Java方面更感興趣。

回答

1

聽起來類似於:android, UTF8 - How do I ensure UTF8 is used for a shared preference

我懷疑是發生在Web服務和Android應用程序的Web界面的問題。一方發送UTF-16或ISO 8859-1字符,另一方將其解釋爲UTF-8(反之亦然)。確認:

  • 從Android的web請求使用UTF-8
  • 的Web服務將回復使用UTF-8。

與其他答案一樣,使用HTTP調試代理來檢查在Android應用程序和Web服務之間發送的字符是否符合您的期望。

0

我建議將您的數據庫訪問代碼提取到標準的Java Env,然後編譯和測試它。這將幫助你找出問題。

即使存在編碼問題,您也不會得到空值。檢查其他問題,如果其他異常拋出。

絕對不是PHP的問題,如果你確定字符串被正確插入。

0

可能是UTF-8和UTF-16或任何其他可能用於存儲這些國際字符的字符集之間的混淆。在UTF-16中,字符將被存儲爲兩個字節,第一個字節爲空字節(0x00)。如果這個雙字節被錯誤地傳回UTF-8,那麼空字節將被視爲字符串終止符的結尾;導致輸出空值而不是國際字符。

首先,您需要100%確定您的國際字符已正確存儲在數據庫中。在網站的php頁面中看到正確的結果並不是保證;因爲兩個錯誤可以給你一個權利。在過去,我經常在數據庫中看到錯誤地存儲的字符,這些字符仍然可以正確顯示在網頁或某個系統上。這將看起來不錯,直到你需要從另一個系統訪問你的數據庫,一切都會因爲你不能在第二個系統上重複同樣的錯誤而鬆動。

+0

嗯,我可以告訴你,我的MySQL數據庫正在將字符存儲爲'utf8_general_ci' – KickingLettuce

+1

通過將您的字符串字段轉換爲二進制文件,您可以驗證每個單獨的字符。此時我手頭沒有MySQL副本,但類似下面的內容應該可以工作:從Test1;中選擇Convert(varbinary(50),field1)。第二件事是嘗試直接從您的Android應用程序中存儲外來字符,並查看它是如何存儲在後端數據庫上的。這樣,您應該知道問題是出自Android端還是PHP端。 – SylvainL