2011-11-23 62 views
3

我存儲了來自世界各地(例如Râşnov)的地名,它正確地存儲在數據庫中,並且在發送到/從php中正確顯示/保存。而當發送到Android它正確顯示,但是當我嘗試通過從Android發送任何重音字符(和其他一些)到數據庫,它失敗了,並停止閱讀第一個壞字符的JSON。處理重音字符

安卓

final HttpClient client = new DefaultHttpClient(params); 
final HttpPost poster = new HttpPost(Constants.COMMAND_URL);  
poster.addHeader("Content-Type", "application/json; charset=utf-8"); 
final String jsonString = cmd.getJSON().toString();  
poster.setEntity(new StringEntity(jsonString));  
final HttpResponse response = client.execute(poster); 

PHP:

header('Content-Type: application/json; charset=utf-8', true,200); 
$data = file_get_contents('php://input'); 
$json = json_decode($data, true); 

例JSON:

{"Params":{"PageIndex":0,"PageSize":20,"SearchTerm":"râs"},"Request":"Search","SessionID":"3EF90227"} 

當我從服務器獲取JSON它顯示爲

{"Result":1,"Results":[{"PlaceName":"R\u00e2\u0219nov Citadel","Country":"Romania","OnlineID":"142","Location":"R\u00e2\u0219nov, Bra\u0219ov County","Category":"1"}]} 

所以它用\ u00e2替換â,我可以從Android做到嗎?

編輯:澄清,我需要通過PHP發送重音字符到我的數據庫的方式。如果我將它們發送(即。),那麼json_decode失敗。

我已經做了android系統

函數utf8_encode

在PHP和new String (oldstring.getBytes(),"UTF-8"),並沒有幫助。

編輯︰它現在的作品,我不知道爲什麼,afaik我沒有做出任何改變。

回答

2

這可能是由於Android不接受這些特定字符,而是將其替換爲相關的代碼。

只有某些版本的Android會接受所有重音字符。

請看看下面的鏈接: http://forums.omgpop.com/forum-feedback/3519-android-app-cannot-add-accented-characters.html

https://android.stackexchange.com/questions/4229/is-it-possible-to-type-accented-letters-using-the-galaxy-s-english-keyboard

+0

服務器發送\ u00e2機器人從將其轉化爲(使用HTML.fromHTML),並且當我輸入的是Android發送。這是問題,我需要發送\ u00e2。我嘗試過使用HTML.toHTML,但它並沒有改變重音字符,只是把標籤放在文本中。 –

+0

@raybritton:你爲什麼需要?如果它是UTF-8編碼,是不是正確的json? (只是要求把它放下,也許你可以通過告訴android json組件使用哪種編碼) – hakre

+0

不知道這是否有幫助,但你可能能夠通過這個鏈接調試你發送/接收的內容:http FYI花了我很長時間才發現:P – DarkMantis