Java HttpUrlConnection POST请求特殊字符奇怪的行为

Java HttpUrlConnection POST请求特殊字符奇怪的行为,java,http,post,utf-8,httpurlconnection,Java,Http,Post,Utf 8,Httpurlconnection,我正在尝试使用HttpURLConnection实现POST请求。这是我的代码: private static void call(String body) throws IOException{ HttpURLConnection con = null; con = (HttpURLConnection)new URL("http://127.0.0.1:8080").openConnection(); con.setRequestProperty("Accept-

我正在尝试使用HttpURLConnection实现POST请求。这是我的代码:

private static void call(String body) throws IOException{
    HttpURLConnection con = null;

    con = (HttpURLConnection)new URL("http://127.0.0.1:8080").openConnection();

    con.setRequestProperty("Accept-Charset", "UTF-8");
    con.setRequestMethod("POST");
    con.setRequestProperty("Content-Type", "application/json; charset=utf-8"); 
    con.setRequestProperty("Accept", "application/json; charset=utf-8");

    con.setDoOutput(true);
    DataOutputStream wr = new DataOutputStream(con.getOutputStream());
    wr.writeBytes(body);
    wr.flush();
    wr.close();
    ...
 }
我将其发布到localhost只是为了用WireShark嗅探它。 问题是,当我的body是一个字符串,其中包含像“òaè”这样的字符时。。。我看到的请求已将le字符串更正为用点替换的字符

例如: 如果正文是“hèllo!”-->请求正文是“h.llo!

为了进行测试,我在java main中执行上述方法,并通过以下方式传递参数:

String pString = "{\"titlè\":\"Hèllo Wòrld!\"}";
String params = new String(pString.getBytes("UTF-8"),"UTF-8");
....
call(body);
这就是我从WireShark得到的:

POST / HTTP/1.1
Accept-Charset: UTF-8
Content-Type: application/json; charset=utf-8
Accept: application/json; charset=utf-8
User-Agent: Java/1.6.0_43
Host: 127.0.0.1:8080
Connection: keep-alive
Content-Length: 24

{"titl.":"H.llo W.rld!"}
任何帮助都将不胜感激。
谢谢

Java中的内部字符串表示始终是UTF-16。因此,在第二个示例中,
params=newstring(pString.getBytes(“UTF-8”),“UTF-8”)将pString转换为具有UTF-8内容的字节数组,然后再转换回存储在参数中的UTF-16。
当字符串进入或离开VM时,必须执行每个编码。这意味着在您的情况下,当您将主体写入流时,必须设置编码

wr.write(body.getBytes("UTF-8"));

Java中的内部字符串表示始终是UTF-16。因此,在第二个示例中,
params=newstring(pString.getBytes(“UTF-8”),“UTF-8”)将pString转换为具有UTF-8内容的字节数组,然后再转换回存储在参数中的UTF-16。
当字符串进入或离开VM时,必须执行每个编码。这意味着在您的情况下,当您将主体写入流时,必须设置编码

wr.write(body.getBytes("UTF-8"));

你试过了吗:谢谢你的建议,但结果是一样的——>{“titl.”:“H.llow.rld!”}你试过了吗:谢谢你的建议,但结果是一样的——>{“titl.”:“H.llow.rld!”}谢谢你的回答,但如果我写({“titlè\”:“Hèllowòrld!”)。getBytes(“UTF-8”);我得到了相同的结果,但是用2个点而不是1个点(对于每个特殊字符)-->{“titl..:“h..llow..rld!”}每个特殊字符的两个字节在UTF-8中应该是正确的。我不熟悉Wireshark-你确定它可以显示UTF-8字符吗?请参阅感谢您的回答,但如果我这样做,请写(“{\'titlè\”:\'Hèllowòrld!\”).getBytes(“UTF-8”);我得到了相同的结果,但是用2个点而不是1个点(对于每个特殊字符)-->{“titl..:“h..llow..rld!”}每个特殊字符的两个字节在UTF-8中应该是正确的。我不熟悉Wireshark-你确定它可以显示UTF-8字符吗?看见