在写http通讯程序时,有时会遇到乱码的问题。
比如以下参数:
uid=root&pwd=123456&msg=哈罗
传递到远端时,中文无法正常显示。
解决办法如下:
将参数转换为字节码数组,然后将整个数组传送过去。
以下是代码:
package com.falls27.frames;
public class MyClass {
public static void main(String[] args) {
// TODO Auto-generated method stub
new MyClass();
}
public MyClass(){
String msg="uid=root&pwd=123456&msg=哈罗";
//将以上参数转换为byte的字符串数组
String byte_str=doJob1(msg);
System.out.println(byte_str);
//将以上字符串数组还原为原始参数
String msg2=doJob2(byte_str);
System.out.println(msg2);
}
public String doJob1(String msg){
String s=msg;
byte b[]=s.getBytes();//默认为gbk编码,也可以指定utf-8编码,如:byte b[]=s.getBytes("utf-8")
String byte_str="byte_str=[";
for(int i=0;i<b.length;i++){
byte_str+="" + b[i] + ",";
}
byte_str+="]";
return byte_str;
}
public String doJob2(String byte_str){
String s=byte_str;
int index1=s.indexOf("[");
int index2=s.indexOf("]",index1 + 1);
s=s.substring(index1 + 1,index2);
String ss[]=s.split(",");
byte b[]=new byte[ss.length];
for(int i=0;i<ss.length;i++){
int d=Integer.parseInt(ss[i]);
b[i]=(byte)d;
}
String msg=new String(b);//默认为gbk编码,也可以指定utf-8编码,如:String msg=new String(b,"utf-8")
return msg;
}
}
运行结果:
byte_str=[117,105,100,61,114,111,111,116,38,112,119,100,61,49,50,51,52,53,54,38,109,115,103,61,-71,-2,-62,-34,]
uid=root&pwd=123456&msg=哈罗