Aja*_*jay 2 java post http firebase-cloud-messaging
我需要使用 Google FCM 发送 HTTP POST。通过下面的代码,可以发送英文消息,但可以发送中文字符。我通过到处添加 UTF-8 进行了多次尝试...需要帮助。
\n\n我的消息的有效负载是下面代码中的 str2。\nAndroid APP 中显示的结果是 \nHello+%E6%88%91
\n\nE68891是正确的UTF-8代码,但我需要它显示为汉字。
\n\npackage tryHttpPost2;\nimport java.io.DataOutputStream;\nimport java.net.URL;\nimport java.net.URLEncoder;\nimport javax.net.ssl.HttpsURLConnection;\n\npublic class TryHttpPost2 \n{\n public static void main(String[] args) throws Exception {\n String url = "https://fcm.googleapis.com/fcm/send";\n URL obj = new URL(url);\n HttpsURLConnection con = (HttpsURLConnection) obj.openConnection();\n con.setRequestMethod("POST");\n con.setRequestProperty("Content-Type", "application/json;x-www-form-urlencoded;charset=UTF-8");\n con.setRequestProperty("Accept-Charset", "UTF-8");\n con.setRequestProperty("Authorization", "key=...............");\n\n String str1 = "{\\"to\\":\\"/topics/1\\",\\"notification\\":{\\"title\\":\\"";\n String str2 = URLEncoder.encode("Hello \xe6\x88\x91", "utf-8");\n String str3 = "\\"}}";\n String urlParameters = str1+str2+str3;\n con.setDoOutput(true);\n DataOutputStream wr = new DataOutputStream(con.getOutputStream());\n\n wr.writeBytes(urlParameters);\n wr.flush();\n wr.close();\n con.getResponseCode();\n }\n}\nRun Code Online (Sandbox Code Playgroud)\n
有两个问题:
\nwriteBytes: 正如 Java 文档所述:\n\n\n对于每个字符,将按照 writeByte 方法的方式写入一个字节,即低位字节。字符串中每个字符的高位八位将被忽略。
\n
所以这个方法不能写unicode字符串。
\nURLEncoder旨在用于GET请求或POST内容类型为 的请求application/x-www-form-urlencoded。但是您使用 content-type 传输数据application/json。您以某种方式尝试在那里也使用 url 编码,但这不起作用。(更多信息请参阅相关 RFC )要解决此问题,请使用正确的方法传输数据:作为 utf-8,在 JSON 中不进行任何编码:
\ncon.setRequestProperty("Content-Type", "application/json; charset=UTF-8");\ncon.setRequestProperty("Accept-Charset", "UTF-8");\ncon.setRequestProperty("Authorization", "key=...............");\n\nString str1 = "{\\"to\\":\\"/topics/1\\",\\"notification\\":\\"title\\":\\"";\nString str2 = "Hello \xe6\x88\x91";\nString str3 = "\\"}}";\nString urlParameters = str1+str2+str3;\ncon.setDoOutput(true);\nOutputStreamWriter wr = new OutputStreamWriter(con.getOutputStream(), "UTF-8");\n\nwr.write(urlParameters);\nwr.flush();\nwr.close();\ncon.getResponseCode();\nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
4634 次 |
| 最近记录: |