发送阿拉伯语通过HTTP岗位作为参数不工作
问题描述:
我打了一个URL以阿拉伯语参数值(如下图所示):发送阿拉伯语通过HTTP岗位作为参数不工作
http://62.215.226.164/fccsms_P.aspx?UID=something&P=somethingS=InfoText&G=96567771404&M=اخص شقث غخع خن ؤخةث&L=E
它完美;我用阿拉伯语在电话上收到消息。但是,当我尝试通过以下代码实现相同的功能时,我只在邮件中收到问号。
public void sendSms(SendSms object)
throws MalformedURLException, ProtocolException, IOException
{
String message = new String(object.getMessage().getBytes(), "UTF-8");
System.out.println(message); // This also prints only question marks
PrintStream out = new PrintStream(System.out, true, "UTF-8");
out.print(message);
String charset="UTF-8";
URL url = new URL("http://62.215.226.164/fccsms_P.aspx");
HttpURLConnection con = (HttpURLConnection) url.openConnection();
con.setRequestProperty("Accept-Charset", charset);
con.setRequestMethod("POST");
// con.setRequestProperty("User-Agent", USER_AGENT);
con.setRequestProperty("Accept-Language", "en-US,en,ar_KW;q=0.5");
con.setRequestProperty("Content-Type", "text/html;charset=utf-8");
String urlParameters = "UID=test&P=test&S=InfoText&G=965" + object.getPhone() + "&M= Hello " + object.getName() + " " + message + " &L=A";
// Send post request
con.setDoOutput(true);
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
int responseCode = con.getResponseCode();
System.out.println("\nSending 'POST' request to URL : " + url);
System.out.println("Post parameters : " + urlParameters);
System.out.println("Response Code : " + responseCode);
BufferedReader in = new BufferedReader(new InputStreamReader(con.getInputStream()));
String inputLine;
StringBuffer response = new StringBuffer();
while ((inputLine = in.readLine()) != null) {
response.append(inputLine);
}
in.close();
}
要在阿拉伯语中获得消息,需要在代码中添加或更改什么?
答
如果你想发送阿拉伯数据作为参数,你需要将这些数据编码为UTF-8。
您可以使用以下代码来获取正确的输出。
BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(conn.getOutputStream(), "UTF-8"));
bw.write(urlParameters);
bw.flush();
bw.close();
在下面的代码中发生了问题。所以用下面的代码替换你的代码。
DataOutputStream wr = new DataOutputStream(con.getOutputStream());
wr.writeBytes(urlParameters);
wr.flush();
wr.close();
答
这是因为HTTP不支持的字符集, 您的浏览器会自动处理URL编码, 在你的代码需要每个参数分别编码,因为特殊字符如的。 asuming object.getMessage()不返回???:
String message = URLEncoder.encode(
""اخص شقث غخع خن ؤخةث",
java.nio.charset.StandardCharsets.UTF_8.toString());
然后拼接:
String urlParameters = "UID=...&M=" + message + "&L=A";
+1
如果平台默认的字符编码不支持阿拉伯语(在这种情况下它不会出现),这只会编码一堆问号。使用接受字符编码名称的版本,不推荐使用。 – erickson
请[不要问同样的问题两次(https://stackoverflow.com/questions/39729307 /如何到手柄阿拉伯语中的Java)。 – VGR