`
这些年
  • 浏览: 399893 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

解决中文件乱码

 
阅读更多

一:使用过滤器解决网get/post请求的乱码

1:过滤器

package com.chinacache.utils;
import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;
import javax.servlet.http.HttpServletResponse;
//解决get和post请求的编码问题
public class CharacterFilter implements Filter {

	public void destroy() {

	}

	public void doFilter(ServletRequest req, ServletResponse resp,
			FilterChain chain) throws IOException, ServletException {
		HttpServletRequest request = (HttpServletRequest)req;//Tomcat
		HttpServletResponse response = (HttpServletResponse)resp;//Tomcat
		
		request.setCharacterEncoding("UTF-8");
		response.setContentType("text/html;charset=UTF-8");
		response.setCharacterEncoding("UTF-8");
		
		MyHttpServletRequest mrequest = new MyHttpServletRequest(request);
		chain.doFilter(mrequest, response);
	}

	public void init(FilterConfig filterConfig) throws ServletException {

	}

}
//1、实现与被增强对象共同的接口(或继承被增强对象)
//2、定义被增强对象的引用
//3、通过构造方法接收被增强对象
//4、修改需要被增强的方法
//5、不需要增强的方法,调用原对象的对应方法
class MyHttpServletRequest extends HttpServletRequestWrapper{
	private HttpServletRequest request;
	public MyHttpServletRequest(HttpServletRequest request){
		super(request);
		this.request = request;
	}
	public String getParameter(String name) {
		try{
			String value = request.getParameter(name);
			if(value==null)
				return value;
			//get方式才需要增强
			String method = request.getMethod();//请求方式:get post
			if("get".equalsIgnoreCase(method)){
				value = new String(value.getBytes("ISO-8859-1"),request.getCharacterEncoding());
			}
			return value;
		}catch(Exception e){
			throw new RuntimeException(e);
		}
	}
	
	
}

 

2:web.xml

<filter>
		<filter-name>CharacterFilter</filter-name>
		<filter-class>com.chinacache.utils.CharacterFilter</filter-class>
	</filter>
	<filter-mapping>
		<filter-name>CharacterFilter</filter-name>
		<url-pattern>/*</url-pattern>
	</filter-mapping>

 二:如果使用spring mvc 的注解@ResponseBody  直接返回中文字符串会出现 "??????" 乱码

解决:

方法1:使用ajax请求时设置返回类型,返回json,xml可以正常显示中文

 
$.ajax({
  type:'get',//可选get
  url:'${projectPath}/execrevokesucceedrecord.json',       //.json   .xml
  data:{"id":id} ,
  dataType:'text',//服务器返回的数据类型 可选XML ,Json jsonp script htmltext等
  success:function(msg){

},
  error:function(){
}
})

 

方法2:不返回string  

参考:http://blog.csdn.net/hurryjiang/article/details/7710110

 

二:img 标签的  src 中存在乱码(http://localhost:8081/starscream/resources/images/bigUser/type_2__%E6%99%BA%E8%83%BD%E4%B8%8B%E8%BD%BD%E6%9C%8D%E5%8A%A1.jpg

过滤器设置(我的图片在resources目录下)

		if (hr.getRequestURI().contains("resources")) {
			String uri = hr.getRequestURI();
			String ch = URLDecoder.decode(uri, "UTF-8");
			if (uri.equals(ch)) {
				chain.doFilter(request, response);
			} else {
				ch = ch.substring(hr.getContextPath().length());
				config.getServletContext().getRequestDispatcher(ch).forward(request, response);
			}
		}

js页面中的使用:url=encodeURI(url);

 参拷(http://bbs.csdn.net/topics/290057574

package com.test;

import java.io.IOException;
import java.net.URLDecoder;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.http.HttpServletRequest;

public class UrlFilter implements Filter {

    public final static String DEFAULT_URI_ENCODE = "UTF-8";
    
    private FilterConfig config = null;
    private String encode = null;
    
    @Override
    public void init(FilterConfig config) throws ServletException {
        this.config = config;
        this.encode = config.getInitParameter("DEFAULT_URI_ENCODE");
        if(this.encode == null) {
            this.encode = DEFAULT_URI_ENCODE;
        }
    }

    @Override
    public void doFilter(ServletRequest req, ServletResponse res,
            FilterChain chain) throws IOException, ServletException {
        HttpServletRequest request = (HttpServletRequest) req;
        String uri = request.getRequestURI();
        String ch = URLDecoder.decode(uri, encode);
        if(uri.equals(ch)) {
            chain.doFilter(req, res);
            return;
        }
        ch = ch.substring(request.getContextPath().length());
        config.getServletContext().getRequestDispatcher(ch).forward(req, res);
    }    

    @Override
    public void destroy() {
        config = null;
    }
}

 web.xml

  <filter>
    <filter-name>urlFilter</filter-name>
    <filter-class>com.test.UrlFilter</filter-class>
    <init-param>
      <param-name>DEFAULT_URI_ENCODE</param-name>
      <param-value>UTF-8</param-value>
    </init-param>
  </filter>
  <filter-mapping>
    <filter-name>urlFilter</filter-name>
    <url-pattern>/*.jpg</url-pattern>
  </filter-mapping>

 

 

分享到:
评论

相关推荐

    idea中.properties文件中文显示乱码问题的解决 文件中文乱码1

    总结,解决IntelliJ IDEA中`.properties`文件中文显示乱码的问题,关键在于确保文件编码与IDE设置相匹配,并且可能需要调整IDE的默认编码设置。通过以上步骤,大多数情况下的乱码问题都能得到解决。如果问题依然存在...

    多文件上传例子(解决中文乱码)

    多文件上传例子,彻底解决中文乱码问题了。总结中文乱码问题如下: 1、所有页面都用UTF-8。 2、写过滤器,设置request.setCharacterEncoding("UTF-8")。 3、javascript脚本里用encodeURI(str)。 4、适当的时候,在...

    Android读取中文文件乱码解决方法

    ### Android读取中文文件乱码解决方法 #### 一、问题背景 在开发Android应用时,经常需要处理中文字符或包含中文的文件。如果处理不当,可能会遇到中文乱码的问题,尤其是在读取本地文件或者从网络下载文件时更为...

    csv文件中文会乱码工具

    excel打开csv文件中文乱码问题,将乱码文件拖到此工具就可完成转码,正常显示中文。

    Java生成pdf文件,解决中文乱码问题.pdf

    Java 生成 PDF 文件,解决中文乱码问题是 Java 编程中常见的问题。解决这个问题的关键是正确地设置中文字体,以避免乱码问题。本文将通过一个完整的示例代码,详细讲解如何使用 iText 库生成 PDF 文件,解决中文乱码...

    乱码解决 乱码解决 乱码解决 乱码解决 乱码解决

    5. **网络传输问题**:在网络传输过程中,如果文件的编码信息丢失,或者传输过程中数据损坏,也可能引发乱码。 二、乱码的解决方法 1. **确定编码格式**:首先,你需要确定原始文件的正确编码格式。可以使用诸如...

    Linux系统中文乱码解决完整方案

    在 Linux 系统中,中文文件在 ssh 终端中显示为乱码,这是由于 SSH 客户端和 Linux 服务器之间的字符集不同所导致的。解决这个问题,需要修改 Linux 系统的默认字符集,使其与 Windows 系统的一致。 本文档提供了两...

    解决Jmeter5.3上传文件中文乱码问题和录制脚本中文乱码问题ApacheJMeter_http.jar

    解决Jmeter5.3上传文件中文乱码问题和录制脚本中文乱码问题,替换原本的lib\ext目录下的ApacheJMeter_http.jar文件,上传文件时,需要勾选“对POST使用multipart / form-data” 和 “与浏览器兼容的头”选项,并在...

    解决adb传输中文出现乱码的最新版adb.exe文件

    在提供的压缩包文件"Adb"中,很可能包含了经过修改的adb.exe程序,用户只需替换原有的adb.exe,即可解决中文乱码问题,无需进行复杂的源码编译。这是一个方便快捷的解决方案,对于那些频繁处理中文文件的开发者来说...

    java读取txt文件乱码解决方案

    java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt文件乱码解决方案java读取txt...

    Java实现文件下载并解决中文文件名乱码

    ### Java实现文件下载并解决中文文件名乱码 在日常的Web开发中,经常会遇到需要让...通过以上步骤和注意事项,我们可以有效地实现Java中文件的下载功能,并且解决了中文文件名可能带来的乱码问题,提高了用户体验。

    Jmeter5.5上传文件中文乱码问题解决包

    解决Jmeter5.5、Jmeter5.5、Jmeter5.5上传文件中文乱码问题和录制脚本中文乱码问题,其他版本请勿使用! 使用时替换原本的lib\ext目录下的ApacheJMeter_http.jar文件并重启,上传文件时,需要勾选“对POST使用...

    linux解决中文乱码问题

    以下是一些解决Linux环境中中文乱码问题的方法和详细步骤: 1. **设置locale** Linux系统中的locale设置对字符编码有很大影响。你可以通过`locale`命令查看当前系统的locale设置。如果系统不支持中文,你需要创建...

    sftp解决上传中文文件乱码 jsch-0.1.54.jar

    sftp解决上传中文乱码,sftp.setFilenameEncoding("GBK");修改是不起作用的,修改源码后重新导出的jar包。

    JAVA 解决Properties文件保存中文乱码

    本文将深入探讨如何在Java中解决Properties文件保存和读取中文乱码的挑战。 首先,我们需要理解Java默认使用ISO-8859-1编码来处理Properties文件。由于此编码不支持大部分中文字符,因此在保存或加载包含中文的...

    JAVA反编译文件解决中文乱码

    然而,当这些.class文件中包含中文字符时,如果没有正确处理编码,可能会出现中文乱码的问题。本文将详细介绍如何解决JAVA反编译文件时的中文乱码问题。 首先,理解问题的根源:Java源代码默认采用UTF-8编码,但...

    Java读取TXT文本文件乱码解决方案.doc

    Java 读取 TXT 文本文件乱码解决方案中,主要讨论的是在 Java 中读取 TXT 文本文件时出现乱码的问题,并提供了解决方案。 首先,文章中提供了一个简单的读取 TXT 文件的代码,使用 BufferedReader 和 FileReader ...

    java读写csv文件,中文乱码问题

    总的来说,处理Java中CSV文件的中文乱码问题主要涉及正确设置字符编码,而给定的.NET DLL文件与此问题的解决没有直接关联。如果你在.NET环境中遇到类似问题,可以参考.NET的编码处理方式,或者寻找适合的.NET库来...

    java压缩zip文件解决中文乱码问题

    总结来说,处理Java中ZIP文件的中文乱码问题,关键在于明确指定字符集,通常是UTF-8,无论是使用Java内置的API还是第三方库。同时,理解文件系统的编码和压缩/解压过程中的字符编码转换也非常重要。通过这种方式,...

Global site tag (gtag.js) - Google Analytics