URLEncoder类为实现将任意字符串转为特定编码的encode编码类似加密后字符串;
URLDecoder类为实现将编码后的字符串通过特定编码转回类似解密后可读的字符串;
设置编译环境和项目编译编码为:UTF-8 UTF-8,
类文件设置为GBK,代码如下:
public static void main(String[] args) {
String str = "GBK:张三 这里是中文设置 123456 ok! ";
try {
String encStr1 = URLEncoder.encode(str, "UTF-8");
String changeStr1 = URLDecoder.decode(encStr1, "UTF-8"); //统一编码转码和回转可改变
String encStr2 = URLEncoder.encode(str, "GB2312");
String changeStr2 = URLDecoder.decode(encStr2, "GB2312");
String encStr3 = URLEncoder.encode(str, "GBK");
String changeStr3 = URLDecoder.decode(encStr3, "UTF-8");
String encStr4 = URLEncoder.encode(str, "ISO-8859-1");
String changeStr4 = URLDecoder.decode(encStr4, "UTF-8");
String encStr5 = URLEncoder.encode(str, "UTF-8");
String changeStr5 = URLDecoder.decode(encStr5, "GBK");
System.out.println(str + " " + str.getBytes());
System.out.println("utf-8转码后解码为utf-8 " + encStr1 + " " + changeStr1);
System.out.println("GB2312转码后解码为GB2312 " + encStr2 + " " + changeStr2);
System.out.println("GBK转码后解码为utf-8 " + encStr3 + " " + changeStr3);
System.out.println("ISO-8859-1转码后解码为utf-8 " + encStr4 + " " + changeStr4);
System.out.println("utf-8转码后解码为GBK " + encStr5 + " " + changeStr5);
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
该方法的测试结果如下:
编码问题:利用某种通信方式(线程间通信或者内容上传如HTTPCLIENT、SOCKET发送等)如何实现发送接收中文不乱码。
方案设定:这里不需要考虑发送接受端类文件的编码类型,因为直接获取到的是一个字符串,并进行处理,所以可以直接在发送端将字符串编码为UTF-8格式,然后发送,接收端接收到编码后的字符串后再用UTF-8解码,得到的字符串保持了原有的特性,即如果是中文将依旧处理为中文字符串(显示是否为中文那就是工程文件编译编码的问题)。