【高分求解】UTF8编码JSP通过GET方式接受GBK乱码
各位好,在下遇到个问题,请教大大们解决下
我们知道“中国”这个词的 utf-8编码为 %E4%B8%AD%E5%9B%BD 而 gbk编码为 %D6%D0%B9%FA
现在小弟有个jsp页面是utf-8编码的
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" errorPage="../error.jsp" %>
如果是 test.jsp?name=%E4%B8%AD%E5%9B%BD
→小弟的tomcat的URIEncode设置为utf-8,所以jsp里面获取直接为正常的中文
问题是,现在url的参数是gbk编码的,也就是test.jsp?name=%D6%D0%B9%FA
我想的是,本来是gbk的编码,被tomcat用utf-8传入
所以我
String ttee = new String(request.getParameter("name").getBytes("utf-8"), "gbk");
ttee = new String(ttee.getBytes("gbk"), "utf-8");
//结果乱码
//直接
ttee = new String(request.getParameter("name")); //也是乱码
不知道该怎么处理了
PS:由于这个地址是一个被的项目的回调地址,通过GET方式访问,所以对方传过来的肯定是gbk编码,不能更改,而我自身的项目也是utf-8编码,也不能改,所以在此请教各位高手
jsp
乱码
------解决方案--------------------说实在,不是很能看懂你说的
这样吧。
一般解决编码的问题是
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
解决的,
你这样试试,如果不行。
告诉我你传入的是什么编码格式,需要的是什么编码格式。。
反正按照我的理解,
new String(request.getParameter("name").getBytes("utf-8"), "gbk");
你这句写倒了
------解决方案--------------------
楼主看这样是否可行,首先解析用GBK编码传入的的值,转换为Utf-8的,再利用,代码:
String result=new String(request.getParameter("name").getBytes("GBK"),"utf-8");是否可行??
------解决方案--------------------uridecode,utf8解码
------解决方案--------------------做个编码转换吧,把客户端请求URL先转换成utf8编码,然后去请求服务器。
------解决方案--------------------
可以用拦截器嘛,在拦截器中去做url编码转换
另外:像这种接口,服务器提供给客户端用,本来就是要指定编码的,不然以后搞一些日文编码或者其他什么的,服务器不是又要去处理了么。
------解决方案--------------------utf-8和gbk之间不可以直接转换 否则你怎么转都会有乱码,utf8下一个汉字是三字节,gbk是两个字节。
需要做下补码处理,
public static byte[] gbk2utf8(String chenese) {
char c[] = chenese.toCharArray();
byte[] fullByte = new byte[3 * c.length];
for (int i = 0; i < c.length; i++) {
int m = (int) c[i];
String word = Integer.toBinaryString(m);
StringBuffer sb = new StringBuffer();
int len = 16 - word.length();
for (int j = 0; j < len; j++) {
sb.append("0");
}
sb.append(word);
sb.insert(0, "1110");
sb.insert(8, "10");
sb.insert(16, "10");
String s1 = sb.substring(0, 8);
String s2 = sb.substring(8, 16);