日期:2014-05-20  浏览次数:20764 次

【高分求解】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");
你这句写倒了

------解决方案--------------------
引用:
引用:说实在,不是很能看懂你说的
这样吧。
一般解决编码的问题是
request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");
解决的,
你这样试试,如果不行。
告诉我你传入的是什么编码格式,需要的是什么编码格式。。
反正按照我……


楼主看这样是否可行,首先解析用GBK编码传入的的值,转换为Utf-8的,再利用,代码:
String result=new String(request.getParameter("name").getBytes("GBK"),"utf-8");是否可行??
------解决方案--------------------
uridecode,utf8解码
------解决方案--------------------
做个编码转换吧,把客户端请求URL先转换成utf8编码,然后去请求服务器。
------解决方案--------------------
引用:
引用:
做个编码转换吧,把客户端请求URL先转换成utf8编码,然后去请求服务器。

谢谢您的回复:

不过URL是对方网站直接跳转的,所以URL是不能改,不是我们项目能自己控制的

可以用拦截器嘛,在拦截器中去做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);