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" : "ä€愛لآहที่" } 

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

当我添加声明时

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

请尝试以下代码:

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

您应该使用JSONObject传递params

输入,请尝试

 BufferedReader reader = new BufferedReader(new InputStreamReader(resultContentIS, "UTF-8")); 

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

您的变量内容似乎已经有错误的数据,因为您可能已经转换了一个String而没有注意所需的编码。

在writer上设置正确的enconding并使用write()而不是writeBytes()应该值得一试。

您必须通过字节数组发送内容

  DataOutputStream outputStream= new DataOutputStream(conn.getOutputStream()); outputStream.write(content.toString().getBytes()); 

这是您的文件名字符问题的完全解决方案。 导入的点是通过字节数组发送的字符串。 每个字符都通过字节字符更改。 这可以防止您的字符编码问题。