gpt4 book ai didi

Java 使用 UTF-8 发送 http POST

转载 作者:可可西里 更新时间:2023-11-01 16:27:43 32 4
gpt4 key购买 nike

我需要使用 Google FCM 发送 HTTP POST。使用下面的代码,可以发送英文消息,但可以发送中文字符。我通过在这里和那里添加 UTF-8 做了很多试验......需要帮助。

我的消息的有效负载是下面代码中的 str2。Android APP中显示的结果是你好+%E6%88%91

E68891 是正确的 UTF-8 编码,但我需要它显示为汉字。

package tryHttpPost2;
import java.io.DataOutputStream;
import java.net.URL;
import java.net.URLEncoder;
import javax.net.ssl.HttpsURLConnection;

public class TryHttpPost2
{
public static void main(String[] args) throws Exception {
String url = "https://fcm.googleapis.com/fcm/send";
URL obj = new URL(url);
HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();
con.setRequestMethod("POST");
con.setRequestProperty("Content-Type", "application/json;x-www-form-urlencoded;charset=UTF-8");
con.setRequestProperty("Accept-Charset", "UTF-8");
con.setRequestProperty("Authorization", "key=...............");

String str1 = "{\"to\":\"/topics/1\",\"notification\":{\"title\":\"";
String str2 = URLEncoder.encode("Hello 我", "utf-8");
String str3 = "\"}}";
String urlParameters = str1+str2+str3;
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());

wr.writeBytes(urlParameters);
wr.flush();
wr.close();
con.getResponseCode();
}
}

最佳答案

有两个问题:

  1. writeBytes:如 Java 文档所述:

    For each character, one byte is written, the low-order byte, in exactly the manner of the writeByte method . The high-order eight bits of each character in the string are ignored.

所以这个方法不能写unicode字符串。

  1. URLEncoder 用于 GET 请求或 POST 请求,内容类型为 application/x-www - 形式 urlencoded。但是您使用内容类型 application/json 传输数据。您以某种方式尝试在那里也使用 url 编码,但这不起作用。 (有关详细信息,请参阅 relevant RFC)

要解决此问题,请使用正确的方法传输数据:作为 utf-8,不在 JSON 中进行任何编码:

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

String str1 = "{\"to\":\"/topics/1\",\"notification\":\"title\":\"";
String str2 = "Hello 我";
String str3 = "\"}}";
String urlParameters = str1+str2+str3;
con.setDoOutput(true);
OutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "UTF-8");

wr.write(urlParameters);
wr.flush();
wr.close();
con.getResponseCode();

关于Java 使用 UTF-8 发送 http POST,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49102665/

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