lvxingang 2012-03-17 09:14 采纳率: 0%
浏览 160
已采纳

Url的编码与String的编码 . 下面的代码是怎么回事?

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呢?
*/

  • 写回答

2条回答 默认 最新

  • Aronlulu 2012-03-17 10:44
    关注

    [quote]String s = "中文"; //1. 这里是GBK编码

    String s1 = URLEncoder.encode(s, "iso8859-1"); //2. 这里再用iso8859-1编码了一回[/quote]
    这一步出来的s1,已经是乱码了。
    后面再转一次是用乱码字符串在转,这里面都是数字和英文,而且用的都是string的转码方式,都不会出问题,所以都是相同的。
    [code="java"]
    String s = "中文";

        String s1 = URLEncoder.encode(s, "iso8859-1"); 
        System.out.println(s1); 
    
        String s3 = URLDecoder.decode(s1,"iso8859-1");
        System.out.println(s3); 
        System.out.println(s1.equals(s3)); 
    

    [/code]
    这样你就能看出来了。根本已经变成乱码了。
    [code="java"]
    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)); 
    

    [/code]
    这样才是正常的。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 C#算法问题, 不知道怎么处理这个数据的转换
  • ¥15 YoloV5 第三方库的版本对照问题
  • ¥15 请完成下列相关问题!
  • ¥15 drone 推送镜像时候 purge: true 推送完毕后没有删除对应的镜像,手动拷贝到服务器执行结果正确在样才能让指令自动执行成功删除对应镜像,如何解决?
  • ¥15 求daily translation(DT)偏差订正方法的代码
  • ¥15 js调用html页面需要隐藏某个按钮
  • ¥15 ads仿真结果在圆图上是怎么读数的
  • ¥20 Cotex M3的调试和程序执行方式是什么样的?
  • ¥20 java项目连接sqlserver时报ssl相关错误
  • ¥15 一道python难题3