Java UTF-8 кодирование не работает HttpURLConnection
Я попытался выполнить почтовый вызов и передать ввод с этим значением - "ä € 愛 لآ ह ท ี่"
Я получил сообщение об ошибке
{"error":{"code":"","message":{"lang":"en-US","value":{"type":"ODataInputError","message":"Bad Input: Invalid JSON format"}}}}
Это мой код
conn.setRequestMethod(ConnectionMethod.POST.toString());
conn.setRequestProperty(CONTENT_LENGTH, Integer.toString(content.getBytes().length));
conn.setRequestProperty("Accept-Charset", "UTF-8");
conn.setUseCaches(false);
conn.setDoInput(true);
conn.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
wr.writeBytes(content);
wr.flush();
wr.close();
InputStream resultContentIS;
String resultContent;
try {
resultContentIS = conn.getInputStream();
BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS));
StringBuilder sb = new StringBuilder();
String line;
while ((line = reader.readLine()) != null) {
sb.append(line);
}
он зависел от conn.getInputStream();
Значение содержимого
{ "input" : "ä€愛لآहที่" }
Он работает там, где вход является строкой или целым числом
Когда я добавил оператор
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8");
У меня появилось другое сообщение
{"error":{"code":"","message":{"lang":"en-US","value":{"type":"Error","message":"Internal server error"}}}}
Ответы
Ответ 1
Попробуйте использовать этот код ниже:
DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8"));
writer.write(content);
writer.close();
wr.close();
Вы должны использовать JSONObject для передачи параметров
Вход, пожалуйста, попробуйте
BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS, "UTF-8"));
Если вы выбрали:???????, так что не волнуйтесь, потому что ваша консоль вывода не поддерживает UTF-8
Ответ 2
Кажется, что у вашего содержимого переменной уже есть неправильные данные, потому что вы можете преобразовать String без какого-либо внимания к требуемой кодировке.
Настройка правильного кодирования для записи и использование write()
вместо writeBytes()
стоит попробовать.
Ответ 3
Вы должны отправлять контент через массив байтов
DataOutputStream outputStream= new DataOutputStream(conn.getOutputStream());
outputStream.write(content.toString().getBytes());
Это полностью решение проблем с именами файлов. Импортированная точка - это отправка строки через массив байтов. Каждый символ меняется с помощью байтового символа. Это предотвращает проблемы с кодировкой символов.