servlet URL重写传值乱码终极解决

http://localhost:8080/ServletTest/url2?name=张三&age=27

String name=request.getParameter("name");

我用了很多方法,如:

加上<meta http-equiv=Content-Type content=\"text/html;charset=gb2312\">    NO!

加上request.setCharacterEncoding("gb2312")    NO!

加上response.setContentType("text/html;charset=gb2312")    NO!

 下面的方法解决了问题:

先来看一个String类的方法:
byte[]
 getBytes(Charset charset) 
使用给定的 charset 将此 String 编码到 byte 序列,并将结果存储到新的 byte 数组。

再来看一个String类的构造方法:

String(byte[], Charset) - 类 java.lang.String 的构造方法

    通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String

public String(byte[] bytes,Charset charset)
通过使用指定的 charset 解码指定的 byte 数组,构造一个新的 String。新 String 的长度是字符集的函数,因此可能不等于 byte 数组的长度。

此方法总是使用此字符集的默认替代字符串替代错误输入和不可映射字符序列。如果需要对解码过程进行更多控制,则应该使用 CharsetDecoder 类。

参数:
bytes - 要解码为字符的 byte
charset - 要用来解码 bytes 的 charset

这样通过下面的语句就能正确地输出汉字了:

out.println("name="+new String(name.getBytes("ISO-8859-1"),"gb2312"));

注:ISO-8859-1编码是单字节编码,向下兼容ASCII,其编码范围是0x00-0xFF;

把其他任何编码的字节流当作ISO-8859-1编码看待都没有问题。
正是这个原因,要将iso-8859-1作用中间转码。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

itzyjr

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值