Java 将JSON中的特殊字符从android发送到PHP
我想向服务器上的PHP文件发送一个JSON,它可以正常工作,除非某些字段包含特殊字符(重音、ñ等) Java文件:Java 将JSON中的特殊字符从android发送到PHP,java,php,android,utf-8,Java,Php,Android,Utf 8,我想向服务器上的PHP文件发送一个JSON,它可以正常工作,除非某些字段包含特殊字符(重音、ñ等) Java文件: HttpClient httpclient = new DefaultHttpClient(); HttpPost httppost = new HttpPost(uri); JSONObject json = new JSONObject(); try { // JSON data: json.put("id_u
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(uri);
JSONObject json = new JSONObject();
try {
// JSON data:
json.put("id_u", viaje.getID_U());
json.put("id_vo", viaje.getID_VO());
json.put("titulo", viaje.getTitulo());
[...]
JSONArray postjson=new JSONArray();
postjson.put(json);
// Post the data:
httppost.setHeader("json",json.toString());
httppost.getParams().setParameter("jsonpost",postjson);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// Post the data:
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setHeader("json",json.toString());
httppost.getParams().setParameter("jsonpost",postjson);
PHP文件:
$json = $_SERVER['HTTP_JSON'];
$data = json_decode($json);
$id_u = $data->id_u;
$id_vo = $data->id_vo;
$titulo = $data->titulo;
[...]
$json = $_SERVER['HTTP_JSON'];
$cadena = utf8_encode($json);
$data = json_decode($cadena);
例如,如果titulo=“día”,$title是空的,但是相反,titulo=“example”是否正确工作。
我不知道如何转换为utf-8之前发送的项目,我尝试了很多事情,但没有为我工作。有什么想法吗
编辑: 我可以解决这个问题。很明显,问题在于编码。我通过在代码中添加两行来解决: Java文件:
HttpClient httpclient = new DefaultHttpClient();
HttpPost httppost = new HttpPost(uri);
JSONObject json = new JSONObject();
try {
// JSON data:
json.put("id_u", viaje.getID_U());
json.put("id_vo", viaje.getID_VO());
json.put("titulo", viaje.getTitulo());
[...]
JSONArray postjson=new JSONArray();
postjson.put(json);
// Post the data:
httppost.setHeader("json",json.toString());
httppost.getParams().setParameter("jsonpost",postjson);
// Execute HTTP Post Request
System.out.print(json);
HttpResponse response = httpclient.execute(httppost);
// Post the data:
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
httppost.setHeader("json",json.toString());
httppost.getParams().setParameter("jsonpost",postjson);
PHP文件:
$json = $_SERVER['HTTP_JSON'];
$data = json_decode($json);
$id_u = $data->id_u;
$id_vo = $data->id_vo;
$titulo = $data->titulo;
[...]
$json = $_SERVER['HTTP_JSON'];
$cadena = utf8_encode($json);
$data = json_decode($cadena);
谢谢你的帮助!:) 听起来像是编码问题。尝试如下设置编码:
HttpPost httppost = new HttpPost(builder.getUrl());
httppost.setHeader("Content-Type", "application/x-www-form-urlencoded;charset=UTF-8");
您还可以像这样强制对内容进行正确编码。但这在这里可能不需要:
// Add your data
httppost.setEntity(new UrlEncodedFormEntity(builder
.getNameValuePairs(), "UTF-8"));
您可能需要在某个点指定一些编码,我认为应该类似于
httpPost.setEntity(新的UrlEncodedFormEntity(params,HTTP.utf8))代码>。但是我没有params
…可能更多的是setHeader内容我测试了建议的代码,但问题仍然存在。在php文件中,$json包含我发送给{“titulo”:“À”}的json,但是$data是空的。