将JSON从Android发送到WAMP服务器

时间:2015-10-27 18:22:10

标签: java php android json gson

我一直在网上寻找将JSON发送到我的服务器的方法,我发现this真的很有帮助。我用它将JSON发送到我的服务器然后计划解码它,但由于某种原因我似乎无法正确使用它。

我使用GSON将HashMap编码为JSON字符串

Map<String, String> myData = new HashMap<String, String>();
myData.put("count", "1");
myData.put("id", "1000");
myData.put("name", "Äpple");
String json = new GsonBuilder().create().toJson(myData, Map.class);

使用JSON字符串,我使用HttpPost将其发送到我的服务器。

HttpPost httpPost = new HttpPost(uri);
httpPost.setEntity(new StringEntity(json));
httpPost.setHeader("Accept", "application/json");
httpPost.setHeader("Content-type", "application/json");


很棒,现在我只需要在我的WAMP服务器上接收编码的JSON,并使用php的 awesome 内置JSON功能对其进行解码。

$json = file_get_contents('php://input');
for ($i = 0; $i <= 31; ++$i) {
    $json = str_replace(chr($i), "", $json);
}
$json = str_replace(chr(127), "", $json);

if (0 === strpos(bin2hex($json), 'efbbbf')) {
    $json = substr($json, 3);
}
$json = stripslashes($json);

$data = json_decode($json, true);


事实证明,内置的JSON支持可能并不是那么棒。也许它与我使用的PHP版本有关(5.5.12)?

这是我正在拼命解码的JSON数据:

{"count":"1","id":"1000","name":"Äpple"}

如果这还不够,那么$json变量的十六进制转储(在删除字符串中的“隐藏字符”之后):

7b22636f756e74223a2231222c226964223a2231303030222c226e616d65223a22c470706c65227d

这些示例为json_last_error()提供了“格式错误的UTF-8字符,可能编码错误”。

有人会如此友好地解释为什么以及如何发送正确编码的UTF-8字符?

0 个答案:

没有答案