java显示html乱码怎么解决方法_Java web解决各种乱码问题
首先先明白一下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解决各种乱码问题相关推荐
- java手写一个分页的方法_java web手写实现分页功能
现在很多流行的框架,都可以很快的把分页效果做出来,但是作为一名程序员你必须得知道手写分页的流程: 场景效果: 一.分页的思路 首先我们得知道写分页代码的思路,保持思路清晰,才能行云流水的去写代码,其实 ...
- dell服务器硬件检测cable,DELL服务器硬件报错解决方法——错误代码寄解决和处理办法...
DELL服务器硬件报错解决方法--错误代码寄解决和处理办法 代码 文本 原因 纠正措施 E1000 Failsafe voltage error. Contact support.(故障保护电压错误. ...
- Python xlrd 读取Excel数字 数字丢失精度 小数位太长 求大神的解决方法(已解决)
Python xlrd 读取Excel数字 跟Excel显示不一样 小数位太长 求大神的解决方法(已解决) 十分想念顺店杂可... Excel显示的数据 Python代码读取 # -*- coding ...
- Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联
Ubuntu18.04配置carla0.9.11踩坑与解决方法总结,同时解决安装carla-ros-bridge遇到的问题,并复现OpenCDA成功与ros关联 背景: 主要是为了复现叶小飞的Open ...
- inline-block间隙原因和解决方法(web前端问题)
inline-block间隙原因和解决方法(web前端问题) 参考文章: (1)inline-block间隙原因和解决方法(web前端问题) (2)https://www.cnblogs.com/ge ...
- Java显示the type xxx is already defined的解决方法
Java显示the type xxx is already defined 今天在做Java的时候,Eclipse一直显示错误,打开一看,显示The type xxx is already defin ...
- java中线程死锁的解决方法_Java线程死锁实例及解决方法
这篇文章主要介绍了Java线程死锁实例及解决方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.死锁的定义 所谓死锁是指多个线程因竞争资源而造成 ...
- 移动硬盘插到电脑上突然打不开或者没有显示的解决方法【已解决】不删设备不删驱动不改电源选项
本方法尤其适用于硬盘之前一切正常,用一段时间突然不行了的情况 最近遇到了一个很棘手的问题就是 移动硬盘 插到电脑上突然不显示了,或者显示打开根目录以后,所有的目录都不能进打开.之前还好好的,数据线也换 ...
- cmd mysql出现乱码怎么解决方法_cmd如何解决mysql乱码
我就废话不多说了,大家还是直接看代码吧~create or replace function aa1(a1 integer[],a2 bigint) returns void AS $$declare ...
最新文章
- 刻意练习:LeetCode实战 -- Task26.判断子序列
- ACMNO.48 01字串
- Restoring Road Network(弗洛伊德算法的使用)
- linux 修改当前系统时间
- 神经网络反向传导算法
- 我来谈谈小程序和工作方向
- 算法竞赛入门经典_3.1_数组_逆序输出_开灯问题
- SAP SolMan 严重漏洞的自动化 exploit 代码遭公开
- Android轩辕剑之ActionBar之一
- linux pstree(process status tree) 命令详解
- 机器学习降维之主成分分析
- Nobook虚拟实验室完爆各种传统实验室
- 【PMP】变更流程图与说明
- 计算机电脑怎么开热点,怎么在电脑上开热点?电脑开热点的两种方法介绍
- LOJ.6073.[2017山东一轮集训Day5]距离(可持久化线段树 树链剖分)
- 干货 | 区块链项目估值的逻辑和误区
- 基于node.js + ElementUI 的sass人力资源后台管理系统的实现
- Lecture6 逻辑斯蒂回归(Logistic Regression)
- 广东b级计算机考试试题,计算机等级考试级B考试试题真题试卷.doc
- sqoop 导数据从 mysql 到 hdfs,load 进 hive
热门文章
- Java毕设项目软考在线题库系统(java+VUE+Mybatis+Maven+Mysql)
- VS2015编译pjsip支持h264视频
- Windows 7 打开PDF文件后提示 Adobe Reader 已停止工作问题
- hp台式计算机怎么进bois,hp台式机bios设置
【图文教程】
- 离散时间信号处理/Week0
- Lumion 和 Vray这2款渲染器哪个更强?
- 2021数据安全与个人信息保护技术白皮书V1.0.0 pdf
- 【数据库基本原理】详解SQL标准中的隔离级别定义
- 《机器人学导论》根据DH参数表计算变换矩阵MATLAB代码
- Google Colab 读取/存储 云盘内的文件