在项目中有另外一系统请求我们的系统,我们会根据请求传入的入参数再进一步获取其它的参数,然后才sendRedirect到真正的请求上。在测试时发现,如果获取的其它参数中有中文汉字,再sendRedirect时出错,原因是地址栏上的中文汉字变成了乱码。
在网上看到说通过URLDecoder.decode(request.getParameter("param1"))即可,但由于我这里的参数比较多,且有些参数还是JSON格式的,不能简单的对URL进行URLDecoder.decode处理(因为整个请求中的:、{、}、//都会被编码),正确的做法是只对URL中的中文进行URLDecoder.decode处理。我的处理方法及测试如下:
import java.io.UnsupportedEncodingException; public class Main { public static void main(String[] args) { String str = "欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/"; String resStr = getEncodeStr(str); System.out.println(resStr); } private static String getEncodeStr(String str) { StringBuffer resultStrBuf = new StringBuffer(); StringBuffer chineseStrBuf = new StringBuffer(); try { for (int i = 0; i < str.length(); i++) { if ((str.charAt(i) + "").getBytes().length > 1) { chineseStrBuf.append(str.charAt(i)); } else { if (chineseStrBuf.length() > 0) { resultStrBuf.append(java.net.URLEncoder.encode(chineseStrBuf.toString(), "UTF-8")); chineseStrBuf.delete(0, chineseStrBuf.length()); } resultStrBuf.append(str.charAt(i)); } } } catch (UnsupportedEncodingException e) { e.printStackTrace(); } return resultStrBuf.toString(); } }
运行结果:
%E6%AC%A2%E8%BF%8E%E5%85%89%E4%B8%B4%E6%88%91%E7%9A%84%E5%8D%9A%E5%AE%A2iteye,%E7%BD%91%E5%9D%80http://bijian1013.iteye.com/
附一:Java如何从字符串中取出中文、Java如何从字符串中取出中文和数字,去掉其他字符
public class Main { public static void main(String[] args) { //Java如何从字符串中取出中文 System.out.println("深圳2015SH".replaceAll("[\\p{ASCII}]","")); System.out.println("深圳2015SH".replaceAll("[\\x00-\\x7F]","")); //Java如何从字符串中取出中文 String str = "欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/"; StringBuffer sb = new StringBuffer(); for (int i = 0; i < str.length(); i++) { if ((str.charAt(i)+"").getBytes().length>1) { sb.append(str.charAt(i)); } } System.out.println(sb); //Java如何从字符串中取出中文 System.out.println("欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/".replaceAll("[^\\u4E00-\\u9FA5]", "")); System.out.println("欢迎光临我的博客iteye,网址http://bijian1013.iteye.com/".replaceAll("[\\w]", "").replaceAll("\\p{Punct}", "")); //Java如何从字符串中取出中文和数字,去掉其他字符 String str1 = "^2^3da42b3中文sae34科e技b2字符2`~!@#$%^&*()_+-=[]{};':\",.<>/?\\93啊"; str1 = str1.replaceAll("[^0-9\\u4e00-\\u9fa5]", ""); System.out.println(str1); } }
运行结果:
深圳 深圳 欢迎光临我的博客,网址 欢迎光临我的博客网址 欢迎光临我的博客,网址 23423中文34科技2字符293啊
附二:检查输入的字符串中是否包含中文
import java.util.regex.Matcher; import java.util.regex.Pattern; /** * 检查输入的字符串中是否包含中文 */ public class Main { static String regEx = "[\u4e00-\u9fa5]"; static Pattern pat = Pattern.compile(regEx); public static void main(String[] args) { String input = "Hell world!"; System.out.println(isContainsChinese(input));//false input = "hello world"; System.out.println(isContainsChinese(input));//false input = ",http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = ",http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "[]%http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "【】%http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//false input = "中国http://bijian1013.iteye.com/"; System.out.println(isContainsChinese(input));//true } public static boolean isContainsChinese(String str) { Matcher matcher = pat.matcher(str); boolean flg = false; if (matcher.find()) { flg = true; } return flg; } }
运行结果:
false false false false false false true
相关推荐
当使用`sendRedirect`重定向时,URL中的参数可能因编码问题导致中文乱码。有两种常见处理方法: 1. **编码转换**:将中文字符串先转换为ISO-8859-1编码,然后再附加到URL上。 2. **URL编码**:使用`java.net....
当使用`sendRedirect()`进行重定向时,如果URL中包含中文字符,也会出现乱码问题。 解决方法是使用`URLEncoder.encode()`对中文进行编码处理。 ```java protected void doGet(HttpServletRequest request, ...
在Java开发过程中,字符编码问题常常导致中文显示为乱码。乱码问题可能出现在各种场景下,例如JSP页面、Servlet处理请求等。本篇文章将详细探讨Java乱码问题产生的原因及解决方案。 #### 一、问题背景与原因分析 ...
解决中文乱码的问题是中文用户在使用计算机系统、网络以及各种编程语言中经常遇到的麻烦。由于中文字符集的特殊性,如果在数据传输或存储过程中处理不当,就会出现乱码问题。中文乱码主要发生在数据编码和解码的过程...
对于GET请求方式,由于参数直接包含在URL中,因此可能会出现乱码问题。为了解决这一问题,可以在转发或重定向前对参数进行编码。 1. **参数编码**:使用`URLEncoder.encode()`方法对参数进行编码。 ```java ...
本文详细介绍了JSP和Servlet中关于请求与响应的关键知识点,包括JSP内置对象的作用、请求与响应对象的使用方法、中文乱码问题及其解决办法、转发与重定向的区别以及Servlet的基本创建和配置流程。希望这些内容能够...
- 在GET请求中,中文数据会直接附加在URL之后,由于URL是基于ASCII字符集,直接发送中文会导致乱码。为了解决这个问题,需要在服务器端使用正确的方法解码URL字符串。 - 在POST请求中,如果请求头和表单编码设置不...
- `setCharacterEncoding(String encoding)`:设置请求体的字符编码,防止中文乱码。 二、Response对象 `Response`对象代表HTTP响应报文,用于向客户端发送响应。其主要功能包括: 1. **设置响应消息**: - `...
在 Servlet 中,需要处理请求和响应的乱码问题。可以使用 req.setCharacterEncoding("utf-8") 处理请求的乱码,使用 resp.setContentType("text/html;charset=utf-8") 处理响应的乱码。 五、web 项目的引入 jar ...
- `request.setCharacterEncoding("UTF-8")`:用于设置请求体(POST方式)的数据编码,防止中文乱码。但需要注意的是,此方法只能对POST方式的请求生效,GET方式的请求编码通常在服务器配置或者过滤器中统一处理。 ...
- 解决乱码问题:通过设置请求的字符集,例如`request.setCharacterEncoding("utf-8")`。 - 处理请求资源路径:容器根据URL找到对应的Servlet配置,并调用相应的Servlet实例。 7. **处理多种请求** - 可通过修改...
重定向网页通常使用`sendRedirect()`方法,如`response.sendRedirect("location")`,其中`location`是重定向的目标URL。 关于session对象的生命周期,如果用户长时间不进行任何操作,一旦超过了JSP容器配置的...
关于乱码问题,Servlet处理中文字符时可能会遇到编码问题。在请求和响应过程中,确保正确的字符编码至关重要。例如,可以使用`request.setCharacterEncoding("UTF-8")`来设置请求的编码,通过`response....
- URL包含中文参数,需在JSP页面中设置请求编码。 7. **Cookie与Session的区别**: - Cookie存储在客户端,Session存储在服务器端。 - Cookie有生命周期限制,Session无默认生命周期,依赖于浏览器会话或显式...
在Web应用中,有时候需要通过`response.sendRedirect`方法重定向到另一个页面,如果重定向URL中包含中文字符,则可能会出现乱码问题。这是因为默认情况下,浏览器不支持对URL中的中文字符进行编码。为了解决这个问题...
- 在`doGet`或`doPost`方法中,可以通过`response.setCharacterEncoding("UTF-8")`设置字符编码来解决中文乱码问题。 - 需要注意的是,对于客户端发送的数据,通常需要先将数据从ISO8859-1转换为UTF-8格式,然后再...
response.sendRedirect() 用于重定向到一个新的 URL,而 forward() 用于将请求转发到一个新的 URL。 3. <%@include file="xxx.jsp"%> 和 <jsp:include> 区别? %@include 指令用于包含一个静态文件,而 ...
- `encodeRedirectURL(String url)`:对URL进行重写,以便使用`sendRedirect()`方法。 #### out对象 `out`对象用于输出动态生成的内容。它实现了`javax.servlet.jsp.JspWriter`接口,提供了以下方法: - `clear()`...
16. Tomcat 5中文乱码问题: 设置请求编码,如`request.setCharacterEncoding("UTF-8")`,并在JSP中使用`<%@page pageEncoding="UTF-8"%>`。 17. finally语句是否一定执行? 在正常控制流或异常处理后,finally块...