我正在尝试使用 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();
...
}
我将其发布到本地主机只是为了用 WireShark 嗅探它。
问题是当我的body是一个包含 ' 等字符的字符串ò' 'à' 'è' 'ç' ...我看到的请求的字符串正确,这些字符被点替换。
例子:
如果身体是“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 = new String(pString.getBytes("UTF-8"),"UTF-8");
将 pString 转换为包含 UTF-8 内容的字节数组,然后再转换回存储在 params 中的 UTF-16。
当字符串进入或离开虚拟机时,每个编码都必须完成。这意味着在您的情况下,您必须在将正文写入流时设置编码。
wr.write(body.getBytes("UTF-8"));
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)