2011-11-23 65 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