在程序中编码问题一直是一个困扰人的问题,往往花费大量的时间去解决出现的编码问题,下面就处理URL编码问题,给出一种解决方案。
public class UrlTest { public static void main(String[] args) throws Exception { String s = "中文"; //1. 这里是GBK编码 String s1 = URLEncoder.encode(s, "iso8859-1"); //2. 这里再用iso8859-1编码了一回 System.out.println(s1); byte[] b = s1.getBytes("iso8859-1"); //3. 这里又用iso8859-1编码了一回, 这回编成了字节数组 String s3 = new String(b,"utf-8"); //4. 这里用utf-8解码. System.out.println(s3); System.out.println(s1.equals(s3)); //这里的打印结果怎么可以为true呢. 怎么能一样呢? } }
说明 : 一个中文字符串(就是中文二字), 先用iso8859-1编码(编码后还是字符串, 见第2步), 再用iso8859-1编码(编码后为字节数组)
最后用utf-8解码成字符串, 怎么变成和第一次打印的结果相同呢? 太费解了吧. 上边那也没用到utf-8啊. 应该解码后是乱七八糟
的字符啊, 最后打印结果怎么为true呢?
String s = "中文"; //1. 这里是GBK编码 String s1 = URLEncoder.encode(s, "iso8859-1"); //2. 这里再用iso8859-1编码了一回
上面这样的写法,出来的内容肯定会是乱码。
String s = "中文"; String s1 = URLEncoder.encode(s, "gbk"); System.out.println(s1); String s3 = URLDecoder.decode(s1,"gbk"); System.out.println(s3); System.out.println(s1.equals(s3));
这样写,出来的才是正确的编码方式。