我正在尝试使用Java和Eclipse发送一些带有http帖子的utf8数据。 无论我尝试什么,脚本发送错误的utf8代码! 例如,我尝试发送希腊字符: 在utf8中的“κ”是%CE%BA,另一方接收%C2%BA,即“º”。 我已经尝试了一切无济于事,搜索到同样的结果,有人可以帮助我吗?
这是我代码的最新版本:
//trans = URLEncoder.encode(trans,"UTF8");
String urlParameters = "reply=1&message=" + trans + "%CE%BA%CE%B1%CE%BB%CE%AD%CF%83%CF%84%CE%B5%20%CF%83%CF%84%CE%BF%20%CE%A0%CE%B1%CF%81%CE%AF%CF%83%CE%B9%CF%80%CE%BF%CE%B4%CE%B9%CE%B1";
System.out.println(urlParameters);
URL url = new URL("https://posttestserver.com/post.php");
//URLConnection conn = url.openConnection();
//conn.setDoOutput(true);
//////////////////////////
HttpURLConnection connection = (HttpURLConnection) url.openConnection();
connection.setDoOutput(true);
connection.setDoInput(true);
connection.setInstanceFollowRedirects(false);
connection.setRequestMethod("POST");
connection.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
//connection.setRequestProperty("charset", "ascii");
connection.setRequestProperty("Content-Length", "" + Integer.toString(urlParameters.getBytes().length));
connection.setUseCaches (false);
DataOutputStream wr = new DataOutputStream(connection.getOutputStream ());
wr.write(urlParameters.getBytes("UTF8"));
wr.flush();
wr.close();
connection.disconnect();
我在很多情况下尝试过编码,因此注释掉了部分......
我不知道发生了什么:(如果我对我的字符串执行以下操作:
byte[] transc = trans.getBytes("UTF-8");
for(int i=0;i < trans.length(); i=i+1){
System.out.println(trans.codePointAt(i));
System.out.println(transc[i]);
}
我在Eclipse控制台上获得以下输出: 954 -50 945 -70 955 -50 941 -79 963 -50 964 -69 949 -50 32 -83 963 -49 964 -125 959 -49 32 -124 928 -50 945 -75 961 32 943 -49 963 -125 953 -49
情节变浓!如果我将我的字符串作为POST的BODY的一部分发送,则所有内容都很精细。如果我把它作为POST的参数发送它就搞砸了。我问我的客户他们是否可以改变它以接受它在体内,但万一他们没有......这里发生了什么? 请帮助,这已经困扰了我两个星期了......
答案 0 :(得分:1)
我认为问题不在于发件人,而在于接收器。哪个字符集使用接收器来解码参数?
您可以通过服务器中的简单行知道:
System.getProperty("file.encoding");