Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将JSON中的特殊字符从android发送到PHP_Java_Php_Android_Utf 8 - Fatal编程技术网

Java 将JSON中的特殊字符从android发送到PHP

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

我想向服务器上的PHP文件发送一个JSON,它可以正常工作,除非某些字段包含特殊字符(重音、ñ等)

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);
例如,如果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是空的。