您的位置:首页 > 运维架构 > Linux

linux下 url中文参数乱码问题

2013-02-04 14:17 190 查看
情况是这样的,这里只有后台,是通过http协议发送url,我这边拦截解析。不过总是出现乱码。开始的时候 改为

nickname = new String(req.getParameter("nickname").getBytes("ISO8859-1"),"utf-8");

如果直接输入中文,出现乱码。

最后看到一篇解决乱码的文章,说是get传出 url中文参数的问题,必须先进过编码,然后接收端进行解码。所以想到了URLDecoder.decode(request.getParameter("nickname"), "utf-8")

我发送url的时候 用URLEncoder.encode(

"你有勇气回来" ,"UTF-8"); 进行编码 然后用上述的进行解码

相应的测试类

package event.test;

import java.io.UnsupportedEncodingException;

import java.net.URLDecoder;

import java.net.URLEncoder;

public class URLDecoderTest {

/**

* @throws UnsupportedEncodingException

*

* 函数功能说明

* 修改者名字 Administrator

* 修改日期 2013-1-22

* 修改内容

* @参数: @param args

* @return

* @throws

*

*/

public static void main(String[] args) throws UnsupportedEncodingException {

// TODO Auto-generated method stub

//将application/x-www-form-urlencoded字符串

//转换成普通字符串

//其中的字符串直接从上图所示窗口复制过来

//将普通字符串转换成

//application/x-www-form-urlencoded字符串

String urlStr =URLEncoder.encode(

"你有勇气回来" ,"UTF-8");

System.out.println(urlStr);

System.out.println("---------------------");

String keyWord =URLDecoder.decode(

"" +

"%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5","UTF-8");

System.out.println(keyWord);

}

}

这样传送到url的中文字符经过编码是以"%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5这样的方式进行出现的。

相应的应该用URLDecoder.decode(request.getParameter("nickname"), "utf-8")

进行解码 但是在本地是好的,能够解码得到中文,但是在linux服务器上得到的还是乱码。

最后又试了nickname = new String(req.getParameter("nickname").getBytes("ISO8859-1"),"utf-8"); 其实这里不用utf-8

因为通过ie高级设置中 一般通过utf-8发送。

不过我又试验了一下 代码如下

public static void main(String[] args) throws UnsupportedEncodingException {

String urlStr = URLEncoder.encode("你有勇气回来", "UTF-8");

System.out.println(urlStr);

System.out.println("---------------------");

String keyWord = URLDecoder.decode(""

+ "%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5",

"UTF-8");

System.out.println(keyWord);

System.out.println(new String(

"%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5"

.getBytes("ISO8859-1")));

}

中文“你有勇气回来”经过编码后为%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5

用decode方法正确解码得到所要的中文

但是用new String("%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5".getBytes("ISO8859-1"))得到的还是%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5 根本就没有解码

那相应的在 linux服务器上,进过encode编码的中文 应该有decode进行解码,不过却没有用到 而是用的

System.out.println(new String(

"%E4%BD%A0%E6%9C%89%E5%8B%87%E6%B0%94%E5%9B%9E%E6%9D%A5"

.getBytes("ISO8859-1"))

我想通过ie发送的时候 已经在ie内部经过了相应的解码 就已经调用了decode方法,具体的是怎么样 请各位看客指点。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: