乱码终极解决方案

Author:Marydon

一、安装好eclipse/myeclipse后,先将开发环境改成UTF-8;
  更改工作空间编码方式
  window-->preferences-->general-->workspace-->更改默认的编码方式
二、导入项目乱码问题
  方法一:更改导入项目的编码方式
    选中当前项目-->右键-->properties-->resources-->将编码方式改为utf-8;
  方法二:更改工作空间编码方式
    window-->preferences-->general-->workspace-->更改默认的编码方式
三、配置TOMCAT解决GET请求乱码问题
  方法一:
    config文件夹-->server.xml文件中配置Connector标签的端口号8080添加属性:URIEncoding="UTF-8";端口号为8009的同样添加该属性;
  方法二:
    前台界面使用encodeURI()方法转码->"getClassBycNameAction?cname="+encodeURI(cname)
    后台接收再转码一次-->URLDecoder.decode(cname,"utf-8")
四、解决ajax传参乱码问题
  post/get方式
    前台利用encodeURI(变量名/"字符串");
    后台接收用URLDecoder.decode(变量名,"utf-8");
五、解决form表单提交类型enctype="multipart/form-data"的中文乱码问题
  String name = request.getParameter("stuName");
  String stuName = new String(name.getBytes("iso8859-1"),"utf-8");

UpdateTime--2017年10月31日15:03:56

六、设置Content-Disposition(指定下载该文件时的文件名)

response.setHeader("content-disposition", "attachment;filename=" + fileName);

会出现的情况:

  情况一:当文件名中带有中文会出现乱码

  解决方法:对文件名以utf-8的形式进行编码,即

// 以UTF-8格式进行编码
fileName = java.net.URLEncoder.encode(fileName,"UTF-8");

  情况二:用URLEncoder编码,当中文文字超过17个时,IE 无法下载文件。

  原因:可能是IE在处理 Response Header 的时候,对header的长度限制在150字节左右。而一个汉字编码成UTF-8是9个字节,那么17个字便是153个字节,所以会报错。而且不跟后缀也不对。

  解决方法:将文件名编码成ISO8859-1,即

fileName = new String(fileName.getBytes("GB2312"), "ISO8859-1");

  情况三:文件名中出现的空格

  综合上面三种情况进行整合

import org.apache.commons.lang.StringUtils;
public static String encodingFileName(String fileName) {
String returnFileName = "";
try {
returnFileName = java.net.URLEncoder.encode(fileName, "UTF-8");
returnFileName = StringUtils.replace(returnFileName, "+", "%20");
if (returnFileName.length() > 150) {
returnFileName = new String(fileName.getBytes("GB2312"), "ISO8859-1");
returnFileName = StringUtils.replace(returnFileName, " ", "%20");
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return returnFileName;
}   

编码转换的原理:

首先在源程序中将编码设置成GB2312字符编码,然后将源程序按Unicode编码转换成字节码加载到内存中(java加载到内存中的字节码都是Unicode编码),然后按GB2312编码获得中文字符串的字节数组,然后生成按ISO8859-1编码形式的Unicode字符串(这时的4个字节就变成了8个字节,高位字节补零),当在网络中传输时,因为setHeader方法中的字符只能按ISO8859-1传输,所以这时候就又把Unicode字符转换成了ISO8859-1的编码传到浏览器(就是把刚才高位补的零全去掉),这时浏览器接收到的ISO8859-1码的字符因为符合GB2312编码,所以就可以显示中文了。

相关推荐:

 

JavaWeb get请求乱码处理的更多相关文章

  1. javaweb请求编码 url编码 响应编码 乱码问题 post编码 get请求编码 中文乱码问题 GET POST参数乱码问题 url乱码问题 get post请求乱码 字符编码

     乱码是一个经常出现的问题 请求中,参数传递的过程中也是经常出现乱码的问题 本文主要整理了请求乱码中的问题以及解决思路   先要理解一个概念前提: 编码就是把图形变成数值码所以说: 图形的字符  -- ...

  2. Javaweb项目中文乱码

    Javaweb项目中文乱码 一.了解常识: 1.UTF-8国际编码,GBK中文编码.GBK包含GB2312,即如果通过GB2312编码后可以通过GBK解码,反之可能不成立; 2.web tomcat: ...

  3. SpringMVC(一)--基础、REST、@RequestParam、POST请求乱码等

    1.SpringMVC基本概述 Spring 为展现层提供的基于 MVC 设计理念的优秀的Web 框架,是目前最主流的 MVC 框架之一 Spring3.0 后全面超越 Struts2,成为最优秀的 ...

  4. javaweb中的乱码问题(初次接触时写)

    javaweb中的乱码问题 在初次接触javaweb中就遇到了乱码问题,下面是我遇到这些问题的解决办法 1. 页面乱码(jsp) 1. 在页面最前方加上 <%@ page language=&q ...

  5. form表单post请求乱码问题

    今天做一个查询的小模块遇到了 请求乱码的问题,表单请求方式是post 解决方法是在web.xml 文件中配置一下内容 <!--配置解决post乱码问题filter --> <filt ...

  6. Get请求,Post请求乱码问题解决方案

    下面以两种常见的请求方式为例讲解乱码问题的解决方法. 1.Post方式请求乱码. 自从Tomcat5.x以来,Get方式和Post方式提交的请求,tomcat会采用不同的方式来处理编码. 对于Post ...

  7. Window下通过charles代理抓取iphone/android手机Https请求乱码问题处理

    Window下通过charles代理抓取iphone手机Https请求乱码问题 如果保持默认设置,https的reqeust和response都是乱码,设置完之后https就可以抓包了 手机端操作: ...

  8. Java Web乱码分析及解决方式(一)——GET请求乱码

    引言:     在进行Web開始时.乱码是我们最常常遇到也是最主要的问题.有经验的程序员非常easy能解决,刚開始学习的人则easy被泥潭困住. 并且非常多时候.我们即使攻克了乱码问题也是不明就里.往 ...

  9. JavaWeb 获取请求网络协议、IP、端口号、项目根路径

      JavaWeb 获取请求网络协议.IP.端口号.项目根路径 CreateTime--2018年6月1日16点32分 Author:Marydon 1.需求 在项目中,需要使用Java向本程序发送r ...

随机推荐

  1. Oracle体系结构及备份(十六)——bg-ckpt

    一  什么是CKPT进程 作用: 发出信号给DBWn 更新数据文件头 更新控制文件 At specific times, all modified databasebuffers in the sys ...

  2. mysql slock

    http://www.itdks.com/dakashuo/new/dakalive/detail/3888

  3. java基础学习总结——数组

    一.数组的基本概念 数组可以看成是多个相同类型数据组合,对这些数据的统一管理. 数组变量属引用类型,数组也可以看成是对象,数组中的每个元素相当于该对象的成员变量. 数组的元素可以是任何数据类型,包括基 ...

  4. 点集转线python最优代码

    import arcpy import os import types def convertPoints(): arcpy.env.overwriteOutput = True inPts = ar ...

  5. Spring加载Hibernate 映射的几种方式及区别

    LocalSessionFactoryBean有好几个属性用来查找hibernate映射文件: mappingResources.mappingLocations.mappingDirectoryLo ...

  6. mysql错误:this authentication plugin is not supported

    this authentication plugin is not supported 应用程序连接mysql docker一直报错:this authentication plugin is not ...

  7. linux 监控CPU 内存情况

    htop

  8. EasyUI Pagination 分页的两种做法

    EasyUI 的 datagrid 支持服务器端分页,但是官方的资料比较少,以下总结了两种 datagrid 的服务器端分页机制,可根据情况具体使用. 一:使用 datagrid 默认机制 后台: p ...

  9. 监听视图树 ViewTreeObserver 获取View的宽高

    前奏:在哪里可以获取到View的宽高 我们知道,在onCreate方法执行完毕以后,View才开始被测量,所以我们在onCreate方法里面通过view.getWidth()或view.getMeas ...

  10. 使用Spring Security和OAuth2实现RESTful服务安全认证

    这篇教程是展示如何设置一个OAuth2服务来保护REST资源. 源代码下载github. (https://github.com/iainporter/oauth2-provider)你能下载这个源码 ...