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 MPI读取tif文件无法正常给各进程分配路径
  • ¥15 如何用MATLAB实现以下三个公式(有相互嵌套)
  • ¥30 关于#算法#的问题:运用EViews第九版本进行一系列计量经济学的时间数列数据回归分析预测问题 求各位帮我解答一下
  • ¥15 setInterval 页面闪烁,怎么解决
  • ¥15 如何让企业微信机器人实现消息汇总整合
  • ¥50 关于#ui#的问题:做yolov8的ui界面出现的问题
  • ¥15 如何用Python爬取各高校教师公开的教育和工作经历
  • ¥15 TLE9879QXA40 电机驱动
  • ¥20 对于工程问题的非线性数学模型进行线性化
  • ¥15 Mirare PLUS 进行密钥认证?(详解)