我一直在网上寻找将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字符?