gpt4 book ai didi

java - 使用 HttpURLConnection 发送 UTF-8 字符串

转载 作者:搜寻专家 更新时间:2023-10-30 20:57:58 24 4
gpt4 key购买 nike

到目前为止,我使用以下代码 fragment 来发送和接收 JSON 字符串:

static private String sendJson(String json,String url){
HttpClient httpClient = new DefaultHttpClient();
String responseString = "";
try {
HttpPost request = new HttpPost(url);
StringEntity params =new StringEntity(json, "UTF-8");
request.addHeader("content-type", "application/json");
request.setEntity(params);
HttpResponse response = httpClient.execute(request);
HttpEntity entity = response.getEntity();
responseString = EntityUtils.toString(entity, "UTF-8");

}catch (Exception ex) {
ex.printStackTrace();
// handle exception here
} finally {
httpClient.getConnectionManager().shutdown();
}
return responseString;
}

即使 json 字符串包含 UTF-8 字符,上面的代码也能正常工作,并且一切正常。

出于多种原因,我不得不更改发送 HTTP post 请求的方式并使用 HttpURLConnection 而不是 apache 的 HttpClient。这是我的代码:

static private String sendJson(String json,String url){
String responseString = "";
try {
URL m_url = new URL(url);
HttpURLConnection conn = (HttpURLConnection)m_url.openConnection();
conn.setDoInput(true);
conn.setDoOutput(true);
conn.setUseCaches(false);
conn.setRequestMethod("POST");
conn.setRequestProperty("content-type", "application/json");
DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
outputStream.writeBytes(json);
outputStream.flush();
outputStream.close();

BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = br.readLine()) != null) {
sb.append(line+"\n");
}
br.close();
responseString = sb.toString();
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}

return responseString;
}

此代码适用于普通英文字符,但似乎不支持 json 字符串中的 UTF-8 字符,因为它每次都失败。 (当向服务器发送 json 时,服务器崩溃说 utf8 无法解码某个字节,但是当从服务器接收 utf8 json 时,我认为它确实有效,因为我设法查看了特殊字符)。

服务器根本没有改变,并且与以前的代码一起工作得很好,所以问题 100% 出在这个新代码 fragment 上。

知道如何修复 json 字符串发送以支持 UTF 8 吗?谢谢

最佳答案

我认为问题出在这部分:

DataOutputStream outputStream = new DataOutputStream(conn.getOutputStream());
outputStream.writeBytes(json);
outputStream.flush();
outputStream.close();

您需要将 json 编码为 UTF-8 而不是这样做
并发送代表 UTF-8 编码的那些字节。

尝试使用这个:

Charset.forName("UTF-8").encode(json)

参见:

Charset.encode

一个更简单的方法是使用例如一个 BufferedWriter 包装一个
OutputStreamWriterOutputStreamWriter 知道自己的编码
因此它将为您完成工作(json 字符串的编码工作)。

BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
bw.write(json);
bw.flush();
bw.close();

关于java - 使用 HttpURLConnection 发送 UTF-8 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24060787/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com