2012年9月7日 星期五

亂碼

這是雨宏的FB留言
今天遇到response.sendRedirect("goods.jsp?id="+strId+"&name="+strName); 其中strName為中文字串, 結果對方接到的是一串亂碼... 我參數接有用String(request.getParameter("name").getBytes("ISO-8859-1"), "utf-8"), 怎麼想都想不透...
回家前經阿志提醒, 要加urlencoder, 果然現在修改後就正常了~~ ^O^
response.sendRedirect("goods.jsp?id="+strId+"&name="+URLEncoder.encode(name,"UTF-8"));
解釋
使用两次编碼的過程相當

String name=java.net.URLEncoder.encode("测试", "UTF-8"); System.out.println(name); name=java.net.URLEncoder.encode(name,"UTF-8"); System.out.println(name); name=java.net.URLDecoder.decode(name, "UTF-8"); System.out.println(name); System.out.println(java.net.URLDecoder.decode(name, "UTF-8"));
复制代码

输出为:

            %E6%B5%8B%E8%AF%95
            %25E6%25B5%258B%25E8%25AF%2595
            %E6%B5%8B%E8%AF%95
            测试

第一次编码后将汉字编码为%和字母数字的格式,而第二次编码的时候是对%字母数字进行编码,虽然解码的时候使用的是ISO-8859-1,但是对于%和字母数字而言用ISO-8859-1和UTF-8解码出来的是一样的,此时就回到了汉字被编码过一次的字符串了,当再次进行解码的时候使用UTF-8就回将它转会汉字。

沒有留言:

張貼留言