Java UTF-8编码无法正常工作HttpURLConnection

use*_*697 16 java

我尝试进行后调用并使用此值传递输入 - "ä€हहที่"我收到错误消息

{"error":{"code":"","message":{"lang":"en-US","value":{"type":"ODataInputError","message":"Bad Input: Invalid JSON format"}}}}
Run Code Online (Sandbox Code Playgroud)

这是我的代码

    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);
        }
Run Code Online (Sandbox Code Playgroud)

它在conn.getInputStream()上失效;

内容的价值是

{ "input" : "�??????" }
Run Code Online (Sandbox Code Playgroud)

它在输入为String或整数的地方工作

当我添加声明时

   conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded; charset=utf-8"); 
Run Code Online (Sandbox Code Playgroud)

我得到了不同的信息

 {"error":{"code":"","message":{"lang":"en-US","value":{"type":"Error","message":"Internal server error"}}}}
Run Code Online (Sandbox Code Playgroud)

Ha *_*yen 40

请尝试以下代码:

DataOutputStream wr = new DataOutputStream(conn.getOutputStream());
BufferedWriter writer = new BufferedWriter(new OutputStreamWriter(wr, "UTF-8"));
writer.write(content);
writer.close();
wr.close();
Run Code Online (Sandbox Code Playgroud)

您应该使用JSONObject传递params

输入,请尝试

BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS, "UTF-8"));
Run Code Online (Sandbox Code Playgroud)

如果输出是:???????,所以不要担心,因为你的输出控制台不支持UTF-8