如何在get方式中,参数为url编码格式和中文时都能正常显示?

我用的是tomcat server.xml设置了URIEncoding="UTF-8"
页面中如果 从文本框中输入中文 然后提交 是正常的
如果用这种UTF-8编码url形式也是正常的,
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
但是如果在url中直接用汉字就不行了会出现乱码

就是 通过下面两种形式都能得到正确结果
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
http://localhost:8080/search.jsp?keyword=编辑
该如何做?
[b]问题补充:[/b]
我用的是tomcat server.xml设置了URIEncoding="UTF-8"
页面中如果 从文本框中输入中文 然后提交 是正常的
如果用这种UTF-8编码url形式也是正常的,
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
但是如果在url中直接用汉字就不行了会出现乱码

就是 通过下面两种形式都能得到正确结果
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
http://localhost:8080/search.jsp?keyword=编辑
该如何做?
我页面用的是UTF-8,tomcat的 server.xml已经设置了URIEncoding="UTF-8"

表单已经设置了 method="get" 提交的时候是正常的,它会自动转为url编码格式
但是如果直接在浏览器地址里 输入中文参数就 不正常了 是乱码"����”格式

其实这个在应用中也没什么大问题,就是在firefox下不太好,因为把http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91 这个地址复制到ff地址栏的时候,它自动转为正常的中文,那样用户搜的话就是乱码
[b]问题补充:[/b]
我用的是tomcat server.xml设置了URIEncoding="UTF-8"
页面中如果 从文本框中输入中文 然后提交 是正常的
如果用这种UTF-8编码url形式也是正常的,
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
但是如果在url中直接用汉字就不行了会出现乱码

就是 通过下面两种形式都能得到正确结果
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
http://localhost:8080/search.jsp?keyword=编辑
该如何做?
问题补充:

我页面用的是UTF-8,tomcat的 server.xml已经设置了URIEncoding="UTF-8"

表单已经设置了 method="get" 提交的时候是正常的,它会自动转为url编码格式
但是如果直接在浏览器地址里 输入中文参数就 不正常了 是乱码"����”格式

其实这个在应用中也没什么大问题,就是在firefox下不太好,因为把http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91 这个地址复制到ff地址栏的时候,它自动转为正常的中文,那样用户搜的话就是乱码
[b]问题补充:[/b]
request.setCharacterEncoding("GBK"); 可以处理地址栏的中文
但是request.setCharacterEncoding("UTF-8");确不能直接处理地址栏的中文
我如果页面用utf-8编码,该怎么处理地址栏的中文?

http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
--URIEncoding是UTF-8
FF中会把:
http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
转成:
http://localhost:8080/search.jsp?keyword=编辑
然后这个又会转成:
http://www.baidu.com/s?wd=%B1%E0%BC%AD

--所以FF神奇的将URIEncoding从UTF-8转成ISO-8859-1,哈哈

解决的方式也很简单,
你看看百度:
http://www.baidu.com/s?wd=%B1%E0%BC%AD
http://www.baidu.com/s?wd=编辑

URIEncoding就用ISO-8859-1.

大多浏览器会把中文直接换成:ISO-8859-1,如果在你的系统里确实需要用户在地址打入中文直接进行查询,建议把URIEncoding改成ISO-8859-1就可以了.但这样以后会造成其它用UTF-8编码的地方就要单独转码了,反而不方便(JSON数据的提交);所以我的建议是不要让用户在地址栏打入中文进行操作;

[quote]页面中如果 从文本框中输入中文 然后提交 是正常的 [/quote]
这个是post提交的吧!

[quote]http://localhost:8080/search.jsp?keyword=编辑 [/quote]

顺便说句,如果你直接在浏览器中的地址栏输入这个的话,浏览器都会使用ISO-8859-1来编码你的URL,然后才提交到服务器,这也是为啥一般服务器端都需要
[code="java"]
String a = new String(param.getBytes("ISO-8859-1"),"GBK");
[/code]
的原因,因为的确是ISO-8859-1的!

Encoding设成gbk试下

需要指定编码接收参数:

[code="java"]String keyword = new String(request.getParameter("keyword").getBytes("ISO8859_1"));[/code]

http://localhost:8080/search.jsp?keyword=%E7%BC%96%E8%BE%91
http://localhost:8080/search.jsp?keyword=编辑

楼主要解析两种不同的编码吗?
建议楼主还是统一编码吧。

[quote]配置tomcat支持URL中文参数,只需添加Connector的URIEncoding参数即可,默认情况下该参数未被配置。要支持URL参数支持中文,加上URIEncoding=”GBK”就行了[/quote]

[code="java"]
     
  maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
  
  enableLookups="false" redirectPort="8443" acceptCount="100"
  
  debug="0" connectionTimeout="20000"
  
  disableUploadTimeout="true" URIEncoding="GBK"/>
[/code]

呵呵,刚看了看我的FF的默认设置:
[quote]network.standard-url.encode-query-utf8 false[/quote]
貌似跟这个有关

老问题了:

参看如下:
http://blog.csdn.net/bohemia/archive/2005/12/10/548706.aspx

[quote]
(4) HTTP GET编码
当你将多字节字符加入URL链接中时就更复杂了,查看用户详细信息。 这样的情况很普遍,但是当你在URL中将一个非US-ASCII的信息传递到下一页时,这种格式是在RFC-2396中没有明确定义的,所以不同的浏览器用自己方式编码含多字节字符的URL。 [/quote]

对于GET方式, 般IE,会根据页面当前的显示编码,转码数据然后附加到URL后,
FF可能默认采用UTF-8来传递get方式编码;

而你的Tomcat的设置:
[quote]server.xml设置了URIEncoding="UTF-8" [/quote]
只是告诉Tomcat,你用什么编码去解析提交过来的URL参数; 并不能决定客户端到底是什么编码来提交的GET参数(这个是客户端决定的);

可能解决方法:
1. 避免使用这种方式,统一采用POST提交;这样避免了各种问题;
2. 所有GET参数都进行客户端编码处理;然后再提交; 服务器再进行解码;
这样可以保证所有的传递数据都一致;
3. 服务器自动检测;
先检测一种编码,不行,在检测另外的;比如先检测ISO,再检测GBK,UTF8等;

不知道其他人是否有更好的办法; 浏览器的解释不同;我感觉避免问题总比解决问题好;

[quote]request.setCharacterEncoding("GBK"); 可以处理地址栏的中文
但是request.setCharacterEncoding("UTF-8");确不能直接处理地址栏的中文 [/quote]
我上面提到了:
request.setCharacterEncoding("GBK");
或者
request.setCharacterEncoding("UTF-8");
只是表明服务器怎么解释客户端请求;
但客户端提交的编码,不是由这个决定的;
所以,如果客户提交的GBK,你用UTF-8就处理不了了,解析了,一定是乱码.

[quote]我如果页面用utf-8编码,该怎么处理地址栏的中文? [/quote]
如果你的Response到客户端是UTF-8;
客户端Post过来,也会自动使用UTF-8进行编码提交;
服务器就可以直接使用UTF-8解码就正确了.
但客户如果GET过来,数据不一定是UTF-8,只使用
request.setCharacterEncoding("UTF-8");
就没办法处理所有情况了...

http://blog.csdn.net/bohemia/archive/2005/12/10/548706.aspx
这个应该有详细说明的.

">

=%E7%BC%96%E8%BE%91
=编辑
为两种不同编码,一个是UTF-8,一个是GBK.

解决办法,可考虑增加一个过滤器,判断请求参数的编码类型,或者按字节判断。中文为双字节,UTF-8为4字节

第一种方法:转换编码!如:new String(param.getBytes("ISO-8859-1"),"GBK");

第二种方法:在tomcat的配置文件server.xml中的
属性中添加
URIEncoding="gb2312"
第三种方法:使用post提交,就没有任何问题了!
第四种方法:使用JASON工具来给你拚串,它会自动给你加密。

当从上一页面跳转到当前页面时,要从地址栏传中文值,当前页面接收时会产生乱码。这是一个普遍存在的JSP国际化的问题。这与所用的服务器有关。基于Tomcat服务器,要解决此问题就必须对服务器的server.xml进行修改。

tomcat做web服务器时,通过地址栏传中文参数时,为防止浏览器上的为乱码
需在服务器server.xml中配置对应的端口中配置编码方式即可.例如:
[code="java"] maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
enableLookups="false" redirectPort="8443" acceptCount="100"
debug="0" connectionTimeout="20000"
disableUploadTimeout="true" useBodyEncodingForURI="true" URIEncoding="UTF-8"/>[/code]

中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了

String departName1 =
new String(getRequest().getParameter("departName").getBytes("ISO-8859-1"),"UTF-8");

request.setCharacterEncoding("UTF-8")

在tomcat配置文件中加入useBodyEncodingForURI="true" URIEncoding="UTF-8"就可以了,或者加个filter过滤器。

  1. 转码 str= new String(str.getBytes("iso8859-1"),"gb2312"); str= new String(str.getBytes("iso8859-1"),"GBK");

2.JSP中乱码
<%@ page language="java" contentType="text/html;charset=GBK" pageEncoding="GBK" %>

  1. tomcat中配置
    更改 Tomcat\conf\server.xml,指定浏览器的编码格式为“简体中文”:
      方法是找到 server.xml 中的
    enableLookups="false" redirectPort="8443" acceptCount="100"
    connectionTimeout="20000" disableUploadTimeout="true" URIEncoding='GBK' />

  2. servlet中
    response.setContentType("text/html; charset=GBK");

5, jsp中js拼url带中文 编码集一定要是UTF-8的
<%@ page language="java" contentType="text/html;charset=UTF-8" pageEncoding="UTF-8" %>

这是我总结的,get后面拼中文,第五种方法试一下