解决全站字符乱码(POST和GET中文编码问题)

乱码问题:

获取请求参数中的乱码问题;

  POST请求:request.setCharacterEncoding(“utf-8”);

GET请求:newString(request.getParameter(“xxx”).getBytes(“iso-8859-1”), “utf-8”);

响应的乱码问题:response.setContextType(“text/html;charset=utf-8”)。

 

  基本上在每个Servlet中都要处理乱码问题,所以应该把这个工作放到过滤器中来完成。

package cn.itcast.web.filter;

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;

public class EncodingFilter implements Filter {
    public void destroy() {

    }

    public void doFilter(ServletRequest request, ServletResponse response,
            FilterChain chain) throws IOException, ServletException {
        // 处理post请求编码问题,只对post请求起作用
        request.setCharacterEncoding("utf-8");
        
        HttpServletRequest req = (HttpServletRequest) request;
        

        
        /*
         * 调包request
         * 1. 写一个request的装饰类
         * 2. 在放行时,使用我们自己的request
         */
        if(req.getMethod().equals("GET")) {
            EncodingRequest er = new EncodingRequest(req);//调包request
            chain.doFilter(er, response);
        } else if(req.getMethod().equals("POST")) {
            chain.doFilter(request, response);
        }
    }

    public void init(FilterConfig fConfig) throws ServletException {

    }
}

装饰者模式实现增强的request类 ,覆写getParameter方法

package cn.itcast.web.filter;

import java.io.UnsupportedEncodingException;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletRequestWrapper;

/**
 * 装饰reqeust
 * @author cxf
 *
 */
public class EncodingRequest extends HttpServletRequestWrapper {
    private HttpServletRequest req;
    
    public EncodingRequest(HttpServletRequest request) {
        super(request);
        this.req = request;
    }

    public String getParameter(String name) {
        String value = req.getParameter(name);
        
        // 处理编码问题
        try {
            value = new String(value.getBytes("iso-8859-1"), "utf-8");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException(e);
        }
        
        return value;
    }
}

 一般如果method设置为“post”,将不会出现乱码,如果将method设置为“get”,可能在汉字传入到后台后会出现乱码问题。

get方式传递中文参数乱码后台可以

将请求参数使用ISO-8859-1分解成字节数组,再将字节数组解码成字符串

String name = new String(request.getParameter("name").getBytes("ISO-8859-1"),"utf-8");

本文出自 “点滴积累” 博客,请务必保留此出处http://tianxingzhe.blog.51cto.com/3390077/1677824

时间: 2024-08-04 03:52:44

解决全站字符乱码(POST和GET中文编码问题)的相关文章

PHP Ajax传值中文字符乱码如何解决

在PHP网站开发中,为了增加用户体验度,Ajax是一种经常使用的技术,但是对于初学者来说,时常会碰到Ajax传值中文字符串时变成乱码的问题,有什么办法可以解决PHP AJAX传值中文字符乱码的问题呢? 我们知道Ajax技术由Javascript演变而来,而Javascript使用UTF-8编码,当前后台页面采用GBK或者其他编码,同时没有进行编码转换时,就会出现中文字符乱码问题. PHP Ajax传值中文字符乱码解决方法 方法一.前后台页面以及数据库统一采用UTF8编码,这是最简单的方法. 方法

彻底解决全站乱码

先分析一下出现乱码的几种情况: 数据在页面显示有乱码 数据到服务器后有乱码 从服务器返回的有乱码 使用Ajax收发时有乱码   数据在页面显示有乱码 也就是服务器获取数据时没有问题,在客户端上显示数据为乱码,这种情况最好解决,只需修改页面的编码即可: pageEncoding="utf-8" <meta http-equiv="Content-Type" content="text/html; charset=utf-8">   数据

解决AJAX中POST或GET传递中文字符乱码

ajax中文乱码有很多原因那么如何解决这个乱码问题呢? 很简单,使用 JS的内置函数 encodeURIComponent 对中文字符串进行转义一下就好了.关于 encodeURIComponent 函数的用法, scape() 方法: 采用ISO Latin字符集对指定的字符串进行编码.所有的空格符.标点符号.特殊字符以及其他非ASCII字符都将被转化成%xx格式的字符编码(xx等于该字符在字符集表里面的编码的16进制数字).比如,空格符对应的编码是%20. 不会被此方法编码的字符: @ *

phpword中文字符乱码解决办法

最近领导要求用php生成word,网上找了很多类啊,函数啊.最终相中phpword.无奈不是国人开发,对中文支持很不友好.经过研究,终于解决了中文乱码,分享出来. 1.用模板word生成word中文乱码解决方案: 打开phpword/Template.php文件,找到$replace = utf8_encode($replace);将其改为$replace =iconv('gbk', 'utf-8', $replace); 即可. 2.直接生成word文档,调用addText对象时中文乱码解决方

解决PHP中文乱码的4项小技巧

字符编码集按长度分为 SBCS(单字节字符集),DBCS(双字节字符集)两大类.早期的软件(尤其是操作系统),为了解决本地字符信息的计算机处理,出现了各种本地化版本(L10N),为了区分,引进了 LANG, Codepage 等概念.但是由于各个本地字符集代码范围重叠,相互间信息交换困难; 软件各个本地化版本独立维护成本较高.因此有必要将本地化工作中的共性抽取出来,作一致处理,将特别的本地化处理内容降低到最少.这也就是所谓的国际化(118N).各种语言信息被进一步规范为 Locale 信息.处理

彻底解决mysql中文乱码的办法

MySQL会出现中文乱码的原因不外乎下列几点: 1.server本身设定问题,例如还停留在latin1 2.table的语系设定问题(包含character与collation) 3.客户端程式(例如php)的连线语系设定问题 强烈建议使用utf8!!!! utf8可以兼容世界上所有字符!!!! Linux下Mysql插入中文显示乱码解决方案 mysql -uroot -p 回车输入密码 进入mysql查看状态如下: mysql不能插入中文 默认的是客户端和服务器都用了latin1,所以会乱码.

MySQL字符集 GBK、GB2312、UTF8区别 解决MYSQL中文乱码问题_Mysql

MySQL中涉及的几个字符集 character-set-server/default-character-set:服务器字符集,默认情况下所采用的. character-set-database:数据库字符集. character-set-table:数据库表字符集. 优先级依次增加.所以一般情况下只需要设置character-set-server,而在创建数据库和表时不特别指定字符集,这样统一采用character-set-server字符集. character-set-client:客户

java中文乱码之解决URL中文乱码问题的方法_java

我们主要通过两种形式提交向服务器发送请求:URL.表单.而表单形式一般都不会出现乱码问题,乱码问题主要是在URL上面.通过前面几篇博客的介绍我们知道URL向服务器发送请求编码过程实在是实在太混乱了.不同的操作系统.不同的浏览器.不同的网页字符集,将导致完全不同的编码结果.如果程序员要把每一种结果都考虑进去,是不是太恐怖了?有没有办法,能够保证客户端只用一种编码方法向服务器发出请求? 有!这里我主要提供以下几种方法 一.javascript使用javascript编码不给浏览器插手的机会,编码之后

php 中解决json中文乱码的函数

php教程自带了json_encode来处理json数据,那么它们对中文的支持不好,下面我们来看个实例 echo json_encode(array(123213,'中国')); {"platformid":"123213","userid":"1023","username":"u00b7u00f0u00b5u00b2u00c9u00b1u00b7u00f0u00ccu00fc"} 我