首先先明白一下Java web里涉及到编码的地方:

1.jsp编码jsp顶部有两处:charset和pageEncoding

charset:服务器发往客户端展现时的编码;

pageEncoding:设置jsp页面本身的编码

2.jsp在部署后到用户的三个阶段:

生成java文件:使用pageEncoding定义的编码格式

Java文件生成class文件:服务器使用utf-8编码吧Java文件转换成字节码class文件

读取class文件传达到用户:服务器获取字节码内容,通过contentType定义的编码格式展现给用户

2.HTML乱码:html 本身含有编码格式

Insert title here

只涉及到表面层,只设置content中的charset的编码格式,

request中文路乱码:没有在当前的jsp中设置读取数据的编码格式,解决方法:

request.setCharacterEncoding("UTF-8");

但是!这种方法对url传参无效,url传参乱码的解决方法:只能修改服务器的传输拜编码格式:修改安装文件Apache-tomcat-6.0.43\conf下的server.xml

添加:URLEncoding="UTF-8"

respose输出中文乱码

设置response输出的编码格式:

response.setContentType("text/html;charset=UTF-8");

cookie造成的乱码cookie保存到客户端过程需要编码转码

在保存cookie数据前:1.先引用Java.net.*:包中包含URLEncoding类,2.保证request和response编码正确3.使用URLEncoding转码并保存:

import="java.net.*"

pageEncoding="UTF-8"%>

//保证request以及response的编码

request.setCharacterEncoding("UTF-8");

response.setContentType("text/html;charset=UTF-8");

//使用URLEncoder解决cookie中中文问题

String username = URLEncoder.encode(request.getParameter("username"),"UTF-8");

String password = URLEncoder.encode(request.getParameter("password"),"UTF-8");

Cookie usernameCookie = new Cookie("username",username);

Cookie passwordCookie = new Cookie("password",password);

usernameCookie.setMaxAge(864000);

passwordCookie.setMaxAge(864000);

response.addCookie(usernameCookie);

response.addCookie(passwordCookie);

%>

使用URLDecode解码

%>

request.setCharacterEncoding("UTF-8");

String username = "";

String password = "";

Cookie[] cookies = request.getCookies();

if(cookies!=null && cookies.length>0){

for(Cookie c:cookies){

if(c.getName().equals("username")){

username = URLDecoder.decode(c.getValue(),"UTF-8");

System.out.println(username);

}

if(c.getName().equals("password")){

password = URLDecoder.decode(c.getValue(),"UTF-8");

}

}

}

%>

1. 项目的编码格式和页面的编码格式不一样不会有乱码问题

2. 页面文件编码格式和页面内容的编码格式不同

:乱码!!! 所以文件编码格式必须和页面内容编码格式相同

3. 在指定pageEncoding时charset会被忽略,指定pageEncoding时页面按照charset编码值显示

但是

当pageEncoding指定为UTF-8时charset指定为GBK,GB2312时不会乱码,但是指定iso-8859-1时显示乱码,为big5时部分乱码

综上所述:在jsp中如果要显示正确的内容,并且保证其显示不乱码,必须要指定contentType 或者 pageEncoding 的属性与文件编码格式一致。并且如果他们都存在,那么pageEncoding必须与文件编码格式一致,contentType必须是中文编码格式才行。

4. 通过URL传递中文参数时接收的乱码情况

参数通过URL传递的时候以http协议传递,格式为iso-8859-1,解决方法:

设置Tomcat服务器全局url请求格式:

在tomcat安装目录的conf/server.xml中找到protocol="HTTP/1.1"的属性配置的连接器,在里面添加URIEncoding属性,具体如下:

port="8080" protocol="HTTP/1.1" redirectPort="8443"/>

URIEncoding

但是

这种情况下就不能使用param = new String(param.getBytes("iso-8859-1"),"UTF-8");了,否则反而继续乱码

不管是超链接还是跳转servlet可以直接使用过滤器统一处理任何请求的编码格式

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 org.apache.log4j.Logger;

public class CharacterFilter implements Filter {

private Logger logger = Logger.getLogger(this.getClass());

String encoding = null;

@Override

public void destroy() {

encoding=null;

}

@Override

public void doFilter(ServletRequest request, ServletResponse response,

FilterChain filterChain) throws IOException, ServletException {

if(encoding!=null){

request.setCharacterEncoding(encoding);

response.setCharacterEncoding("encoding");

}

filterChain.doFilter(request, response);

}

@Override

public void init(FilterConfig filterConfig) throws ServletException {

encoding = filterConfig.getInitParameter("encoding");

}

}

web.xml配置

characterFitler

com.struts2.util.CharacterFilter

encoding

UTF-8

characterFitler

/*

敲黑板:这是个概率事件!!!在处理get请求的时候成功率只有60~70%

5.在PrintWriter输出的时候出现乱码:

在servlet请求顶部添加response.setContentType("text/html;charset=UTF-8"); 设置内容编码格式

划重点 划重点

(1)在参数的时候出现乱码,如果是get请求可以统一设置tomcat的uri编码处理格式,这样所有的url发送的请求都是以指定格式发送。

(2)request.setCharacterEncoding("UTF-8");主要用户 get/post请求中设置整个servlet的编码格式,好处是防止传递的中文参数乱码。

(3)response.setContentType("text/html;charset=UTF-8"); 主要用于指定当前请求中的内容格式,好处是防止输出内容的时候防止中文乱码。

(4)如果在处理中文乱码中以上方法都解决不了,那就要使用js前段编码两次,后台解码的方式处理

6.在框架中解决乱码

1.struts2中:在struts.xml中配置一个常量来指定所有Post请求的编码

spring中在web.xml中配置一个过滤器

encodingFilter

org.springframework.web.filter.CharacterEncodingFilter

encoding

UTF-8

forceEncoding

true

encodingFilter

/*

java显示html乱码怎么解决方法_Java web解决各种乱码问题相关推荐

  1. java手写一个分页的方法_java web手写实现分页功能

    现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程: 场景效果: 一.分页的思路 首先我们得知道写分页代码的思路,保持思路清晰,才能行云流水的去写代码,其实 ...

  2. dell服务器硬件检测cable,DELL服务器硬件报错解决方法——错误代码寄解决和处理办法...

    DELL服务器硬件报错解决方法--错误代码寄解决和处理办法 代码 文本 原因 纠正措施 E1000 Failsafe voltage error. Contact support.(故障保护电压错误. ...

  3. Python xlrd 读取Excel数字 数字丢失精度 小数位太长 求大神的解决方法(已解决)

    Python xlrd 读取Excel数字 跟Excel显示不一样 小数位太长 求大神的解决方法(已解决) 十分想念顺店杂可... Excel显示的数据 Python代码读取 # -*- coding ...

  4. Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联

    Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联 背景: 主要是为了复现叶小飞的Open ...

  5. inline-block间隙原因和解决方法(web前端问题)

    inline-block间隙原因和解决方法(web前端问题) 参考文章: (1)inline-block间隙原因和解决方法(web前端问题) (2)https://www.cnblogs.com/ge ...

  6. Java显示the type xxx is already defined的解决方法

    Java显示the type xxx is already defined 今天在做Java的时候,Eclipse一直显示错误,打开一看,显示The type xxx is already defin ...

  7. java中线程死锁的解决方法_Java线程死锁实例及解决方法

    这篇文章主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.死锁的定义 所谓死锁是指多个线程因竞争资源而造成 ...

  8. 移动硬盘插到电脑上突然打不开或者没有显示的解决方法【已解决】不删设备不删驱动不改电源选项

    本方法尤其适用于硬盘之前一切正常,用一段时间突然不行了的情况 最近遇到了一个很棘手的问题就是 移动硬盘 插到电脑上突然不显示了,或者显示打开根目录以后,所有的目录都不能进打开.之前还好好的,数据线也换 ...

  9. cmd mysql出现乱码怎么解决方法_cmd如何解决mysql乱码

    我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...

最新文章

  1. 刻意练习:LeetCode实战 -- Task26.判断子序列
  2. ACMNO.48 01字串
  3. Restoring Road Network(弗洛伊德算法的使用)
  4. linux 修改当前系统时间
  5. 神经网络反向传导算法
  6. 我来谈谈小程序和工作方向
  7. 算法竞赛入门经典_3.1_数组_逆序输出_开灯问题
  8. SAP SolMan 严重漏洞的自动化 exploit 代码遭公开
  9. Android轩辕剑之ActionBar之一
  10. linux pstree(process status tree) 命令详解
  11. 机器学习降维之主成分分析
  12. Nobook虚拟实验室完爆各种传统实验室
  13. 【PMP】变更流程图与说明
  14. 计算机电脑怎么开热点,怎么在电脑上开热点?电脑开热点的两种方法介绍
  15. LOJ.6073.[2017山东一轮集训Day5]距离(可持久化线段树 树链剖分)
  16. 干货 | 区块链项目估值的逻辑和误区
  17. 基于node.js + ElementUI 的sass人力资源后台管理系统的实现
  18. Lecture6 逻辑斯蒂回归(Logistic Regression)
  19. 广东b级计算机考试试题,计算机等级考试级B考试试题真题试卷.doc
  20. sqoop 导数据从 mysql 到 hdfs,load 进 hive

热门文章

  1. Java毕设项目软考在线题库系统(java+VUE+Mybatis+Maven+Mysql)
  2. VS2015编译pjsip支持h264视频
  3. Windows 7 打开PDF文件后提示 Adobe Reader 已停止工作问题
  4. hp台式计算机怎么进bois,hp台式机bios设置 【图文教程】
  5. 离散时间信号处理/Week0
  6. Lumion 和 Vray这2款渲染器哪个更强?
  7. 2021数据安全与个人信息保护技术白皮书V1.0.0 pdf
  8. 【数据库基本原理】详解SQL标准中的隔离级别定义
  9. 《机器人学导论》根据DH参数表计算变换矩阵MATLAB代码
  10. Google Colab 读取/存储 云盘内的文件