部分字符乱码,急切阿!!!

大家好,我遇到一个奇怪的问题:

通过get方式传递参数:
query.do?item=教育

我在后端截取后,通过转码为utf-8后得到的字符,为“教�”,转为GBK或者GB2312都不行,
后来我发现“发展观”也变成了“发展�”。
为什么这么奇怪呢?

为什么只是部分文字乱码呢???各位有遇到过此种问题的吗?帮忙解答下,感激不尽!

注:我的页面编码都是utf-8的。
[b]问题补充:[/b]
heppytt,你好!
我这个工程也是用了过滤器的啦!要不就全都是乱码啦,为何偏偏是个别字符乱码呢?这个问题我也是偶然才发现的,因为乱码的问题最简洁的办法就是过滤器了。但是我这个情况却不知道是什么原因。。。

介绍我的方法:

encodeURIComponent(dudu赛车),它是将中文、韩文等特殊字符转换成utf-8格式的url编码
主要是为了网页国际化---> dudu%E8%B5%9B%E8%BD%A6

1.在客户端(页面js)将中文转成utf-8的格式url编码. 即%E8%B5%9B格式的
2.然后在服务器端(jsp/servlet)中.重新将utf-8的url编码转成中文即可.

举例:

客户端 js里面:
function transHander(){
var obj = document.getElementById("content");//对象

var paramValue = obj.value; //获得中文参数的值
var trans_paramValue = encodeURIComponent (paramValue);//转码
obj.value=trans_paramValue; //将对象重新赋值.
window.location="query.do?param"+trans_paramValue;//链接.
}

服务器端 jsp /servlet :
String param= request.getParameter("param");
param= URLDecoder.decode(param,"UTF-8"); //重新转码

祝你成功.

我发个拦截器给你 你这个是不是struts项目 如果是就可以了用
package com.mars.struts.filter;

import java.io.IOException;

import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;

public class Filter implements javax.servlet.Filter {

public void destroy() {
    // TODO Auto-generated method stub

}

public void doFilter(ServletRequest request, ServletResponse response,
        FilterChain chain) throws IOException, ServletException {
    request.setCharacterEncoding("utf-8");
    chain.doFilter(request, response);
}

public void init(FilterConfig arg0) throws ServletException {
    System.out.println("filter--------init?");

}

}

在WEB.XML中写

filter
com.mars.struts.filter.Filter


filter
/*

该了之后就好了 ,如果不行 你看看你的工程是不是UTF-8的

[quote]query.do?item=教育[/quote]

你用FireFox和IE,应该有不同的结果吧? 呵呵

GET方式传递中文字符,规范没明确规定编码方式.这样最容易出问题;

不是修改,我觉得应该避免;

用js的encodeURI方法转成uri的编码方式好一些吧

不会吧 我都没有出现过这个问题呢

要不你把工程发下来给我看看

能改成post方式应该就没这么多麻烦了。

GET方法java.net.URLEncoder.encode("中文", "UTF-8")后再传递,或者用POST,
取值直接request.getParameter()就行了,不要转了

GET方法java.net.URLEncoder.encode("中文", "UTF-8")后再传递,或者用POST,
取值直接request.getParameter()就行了,不要转了

GET方法java.net.URLEncoder.encode("中文", "UTF-8")后再传递,或者用POST,
取值直接request.getParameter()就行了,不要转了

也要看页面的编码..如果是post请求就不要转啦.

解决办法
1:页面编码要统一
如<%@ page contentType="text/html;charset=UTF-8" pageEncoding="utf-8"%>
还有文件的存储编码
及可能需要转码的地方

用new String(item.getBytes("iso8859_1"));

80%可以解决。
:lol:

你这个都是最后个字有问题,你看看这个过滤器是自己实现的还是第三方的,如果自己实现的看看是不是最后的字符的处理上有问题

我以前用struts1.2的时候也用到过这个问题.
后来是通过string ss = new string(....)解决的
你去试下

昨天我也遇到了。。。

你先看看你的文件的编码是怎么回事...

看是不是跟其他一样...

或者用

String xx = new String(xx.getBytes("") );

有些 请求,还真只能是get请求.