Подтвердить что ты не робот

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"}}}}
4b9b3361

Ответ 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());

Это полностью решение проблем с именами файлов. Импортированная точка - это отправка строки через массив байтов. Каждый символ меняется с помощью байтового символа. Это предотвращает проблемы с кодировкой символов.