Я искал в Интернете способ отправить JSON на мой сервер, и я нашел этот действительно полезный ответ. Я использовал это, чтобы отправить 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");
Отлично, теперь мне нужно только получить закодированный JSON на моем WAMP-сервере и использовать классно Встроенная функциональность JSON PHP для его декодирования.
$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, которые я так отчаянно пытаюсь декодировать с помощью php:
{"count":"1","id":"1000","name":"Äpple"}
Если этого не достаточно, вот шестнадцатеричный дамп $json
переменная (после удаления «скрытых символов» в моей строке):
7b22636f756e74223a2231222c226964223a2231303030222c226e616d65223a22c470706c65227d
В примерах приведены «Неправильные символы UTF-8, возможно, неправильно закодированные» из json_last_error()
,
Будет ли кто-то так любезно объяснить, почему и как я отправляю правильно закодированные символы UTF-8?
Задача ещё не решена.
Других решений пока нет …