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;