有同事讨论到关于url编码的问题。
因此总结以下几点方法供大家参考。
首先,对于post请求的时候,通过过滤器就可以搞定,以下的方法主要是针对get方式的乱码处理。
1. 手工对字符串编码解码的方法为:
这个方法适用于自己从原始字符串中进行解码处理。
2. tomcat服务器的处理url编码的方法:
修改tomcat的server.xml增加指定的编码,以代替tomcat默认的ISO-8859-1。
需要增加的参数为:URIEncoding,
比如下面的例子是制定解码使用UTF-8,
如果用到了apache与tomcat 的整合,则还需要:
(这个方法最简单方便,但是使用这种的方法之后,代码中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 这样的处理方式)
3.对于已经部署的系统,可能已经有其他同事对编码使用了
因此,我们可以自己重新解析queryString我封装了几个方法。使用重新封装的方法可以在不影响原来系统的情况下,正确的获得参数。
封装的代码如下,供大家参考:
转自http://www.blogjava.net/lizongbo/archive/2007/09/29/39833.html
因此总结以下几点方法供大家参考。
首先,对于post请求的时候,通过过滤器就可以搞定,以下的方法主要是针对get方式的乱码处理。
1. 手工对字符串编码解码的方法为:
java.net.URLEncoder.encode("测试","UTF-8"); java.net.URLDecoder.decode("%E6%B5%8B%E8%AF%95%26%3Faaa","UTF-8");
这个方法适用于自己从原始字符串中进行解码处理。
2. tomcat服务器的处理url编码的方法:
修改tomcat的server.xml增加指定的编码,以代替tomcat默认的ISO-8859-1。
需要增加的参数为:URIEncoding,
比如下面的例子是制定解码使用UTF-8,
<Connector port="8080" maxThreads="800" minSpareThreads="25" maxSpareThreads="100" enableLookups="false" redirectPort="8443" acceptCount="0" debug="0" connectionTimeout="20000" URIEncoding="UTF-8" disableUploadTimeout="true" />
如果用到了apache与tomcat 的整合,则还需要:
<Connector port="8009" URIEncoding="UTF-8" enableLookups="false" redirectPort="8443" debug="0" protocol="AJP/1.3" maxThreads="1100" minSpareThreads="25" maxSpareThreads="100" acceptCount="0"/>
(这个方法最简单方便,但是使用这种的方法之后,代码中就不需要也能有new String(strvalue.getBytes("ISO8859-1","GBK"); 这样的处理方式)
3.对于已经部署的系统,可能已经有其他同事对编码使用了
new String(strvalue.getBytes("ISO8859-1","GBK");这样的方法作了处理,这个时候使用第二种方法就可能会影响到其它模块的正常使用,
因此,我们可以自己重新解析queryString我封装了几个方法。使用重新封装的方法可以在不影响原来系统的情况下,正确的获得参数。
封装的代码如下,供大家参考:
/** * 从请求的url字符串中解析参数,当request.getParameterValues()取得的参数值编码值不正确的时候可以使用该方法 * @param request HttpServletRequest * @param paramName String * @return String[] 返回多个同参数名的值 */ public static String[] getParamsFromQueryString(HttpServletRequest request, String paramName) { return getParamsFromQueryString(request.getQueryString(), paramName); } /** * 从请求的url字符串中解析参数,当request.getParameterValues()取得的参数值编码值不正确的时候可以使用该方法 * @param request HttpServletRequest * @param paramName String * @return String[] */ public static String getParameterFromQueryString(HttpServletRequest request, String paramName) { return getParameterFromQueryString(request.getQueryString(), paramName); } /** * 从请求的url字符串中解析参数,当request.getParameter()取得的参数值编码值不正确的时候可以使用该方法 * @param queryString String * @param paramName String * @return String 只返回一个值 */ public static String getParameterFromQueryString(String queryString, String paramName) { String[] s = getParamsFromQueryString(queryString, paramName); if (s != null && s.length >= 1) { return s[0]; } return null; } /** * 从请求的url字符串中解析参数,当request.getParameter()取得的参数值编码值不正确的时候可以使用该方法 * @param queryString String * @param paramName String * @return String[] 返回多个同参数名的值 */ public static String[] getParamsFromQueryString(String queryString, String paramName) { if (paramName == null || paramName.length() < 1 || paramName == null || paramName.length() < 1) { return new String[0]; } List rsl = new ArrayList(); String params[] = queryString.split("&"); for (int i = 0; i < params.length; i++) { // System.out.println(params[i]); if (params[i] != null && params[i].startsWith(paramName + "=")) { try { rsl.add(java.net.URLDecoder.decode(params[i].substring(paramName. length() + 1), "UTF-8")); //根据需要修改自己要使用的编码。 } catch (UnsupportedEncodingException ex) { } } } return (String[]) rsl.toArray(new String[0]); } public static void main(String[] args) { //该例子演示解码。 //jsp和servlet中调用 // System.out.println(getParameterFromQueryString(request.getQueryString(), "q")); //该例子示意的是gogole的url中的queryString。 System.out.println(getParameterFromQueryString( "hl=zh-CN&newwindow=1&q=%E6%B5%8B%E8%AF%95%26%3Faaa&meta=", "q")); }
转自http://www.blogjava.net/lizongbo/archive/2007/09/29/39833.html
发表评论
-
eclipse单个程序的jvm设置
2009-02-23 11:06 1801eclipse 有启动参数里设置jvm大小,因为eclipse ... -
[Portlet]tabs标签引用
2009-02-20 12:02 1304在liferay中封装了丰富的UI组件,其中一个比较常用的就是 ... -
JAVA上传图片时获取尺寸
2009-02-19 12:04 2774BufferedImage sourceImg = javax ... -
java读取配置文件的几种方法
2009-02-12 14:27 1223在现实工作中,我们常常需要保存一些系统配置信息,大家一般都会选 ... -
portal JSR168 上传下载
2009-02-11 15:49 965在portlet jsR 168中实现上传下载的问题 /* ... -
tomcat的OutOfMemoryError解决方法
2009-02-11 14:22 723最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植 ... -
zip解压
2009-02-11 14:17 906private static void extZi ... -
common-net包的ftp上传进度
2009-01-19 21:19 1760//上传文件 public void uploadFil ... -
用JakartaCommon的net组件来做ftp 文件传输(补充)
2009-01-12 14:21 772ftpClient.setControlEncoding(&q ... -
用JakartaCommon的net组件来做ftp 文件传输
2009-01-12 14:16 1171package com.wwkj.cms.test.ftp; ... -
tomcat传递url中文参数乱码
2008-12-26 15:36 774如果页面的编码正确,修改server.xml的connecto ... -
Hibernate的lazy属性失效
2008-12-26 15:28 894配置openSessionInViewFilter <f ... -
DWR session error
2008-12-26 15:25 806dwr不允许跨域访问,可在dwrservlet中加入 < ... -
获取时间
2008-12-26 15:00 512Calendar calendar = Calendar.ge ... -
excel汇出
2008-12-26 14:51 847输出html代码时,设置content-type为applic ...
相关推荐
1. escape() 不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如“春节”的返回结果是%u6625%u8282,escape()不对”+”编码主要用于汉子编码,现在已经不提倡使用了。 2. encodeURI()是...
这个软件对解码数据大小没有要求,几十MB,几百MB都没问题
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e...
取url的长度为300,如果超过则检测不到,这300个字符中可能包含下一个或几个HREF标签,但这不用担心,程序会分析每个标签的。 为什么取那么多,是因为很多网页的URL编码可能很长,比如百度推广的广告和陶宝网的...
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。 最早的编码是iso8859-1,和ascii编码相似。但为了方便表示各种各样的语言,逐渐出现了很多标准编码 sqlserver里面有char和nchar,那个...
然而,一个映射可能是由一个URL和许多Servlet实例组成,例如:一个分布式的Servlet引擎可能运行在不止一个的服务器中,这样的话,每一个服务器中都可能有一个Servlet实例,以平衡进程的载入。作为一个Servlet的...
FFmpeg Batch AV Converter是一款专业的通用音频和视频编码器,只需...3、可以批量处理多文件,批量编码成千上万个媒体文件。 4、完成媒体文件编码之后支持自动关闭,并运行后续脚本。 5、支持用户自定义设置媒体编码
自己初学VBS JS脚本后完成的几个实例 部分 JS/VBS 程序作品演示 // sunyueming url generator v0.4a 设计这个程序的目的是为了快速的下载网上的一些成序列的图片,它可以生成一大排链接,还可以预览图片,当然可以...
实际上,escape()不能直接用于URL编码,它的真正作用是返回一个字符的Unicode编码值。比如”春节”的返回结果是%u6625%u8282,也就是说在Unicode字符集中,”春”是第6625个(十六进制)字符,”节”是第8282个...
创建了几个String Object? 两个 28、设计4个线程,其中两个线程每次对j增加1,另外两个线程对j每次减少1。写出程序。 以下程序使用内部类实现线程,对j增减的时候没有考虑顺序问题。 public class ThreadTest1{ ...
这个博客帖子概述了几个方法,你可以用来在ASP.NET中干净地映射或重写URL,以及按照你自己的需求组织你的URL的结构。 为什么URL映射和重写很重要? 下面是开发人员想要对URL有更大的灵活性的最常见的场景: 1) ...
最近几个项目,都出现了乱码问题。某些通过URL来传送、值为汉字的参数,在页面中显示的是乱码,但是在本地开发环境是正常显示的。排除的因素当然就是服务器的设置不当了,但具体是那些原因呢?一般我们所装的linux...
一开始,被这个问题也搞得头大,在google了一把后,总算是把问题给搞清楚了,其实只要这个链接地址不经过任何编码传递是不会有问题的。但就是加到了这个功能块后,再点击,虽然这个时候在IE地址栏里显示的还是...
在开发中遇到了几个问题,现写出来供需要的朋友参考。 1. SSL问题,用的是indyhttp控件,使用SSL时需要添加 IdSSLIOHandlerSocketOpenSSL1 组件 然后 idhttp的iohandler 属性指向 IdSSLIOHandlerSocketOpenSSL1。 ...
这个产品,做到现在,我遇到了这么几个情况,有和大家分享的,也有向大家请教,求助的。 1.关于对应关系数据的保存方式 在创建索引的时候,需要将网页的URL和网页的内容传到相应的方法中,当然URL和内容是要...
本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等。在下面的描述中,将以"中文"两个字为例,经查表可以知道其GB2312编码是"d6d0 cec4",Unicode编码为"4e2d 6587",UTF编码就是"e4b8ad e...
QR码最普遍的用例是将URL编码为图像。 为此,HR代码相对于QR代码具有以下优点和缺点:好处用户可以在不费力地扫描数据之前先了解一下数据。 由于用户还可以看到打印的URL,因此更能抵抗网络钓鱼攻击。 通过在打印的...
这个逻辑模型实际上提供了这几个概念: Cubes (立方体)、维度( Dimensions )、层次( Hierarchies )、级别( Levels )、和成员( Members )。而一个 schema 文件就是编辑这个 schema 的一个 xml 文件。在这个...
imgix-core-js是一个JavaScript库,用于使用生成图像URL,该URL可在浏览器或... 每当您将数据提供给imgix-core-js时,请确保其尚未经过URL编码,因为该库会在内部处理正确的编码。 普通JS var ImgixClient = require