java中可以出现的中文乱码的集中解决
从学习javaweb开始就会经常遇到中文乱码,今天就做以下记录:
1. 要避免项目中遇到乱码,首先就是在搭建项目的设置工作空间的字符编码,若是多人开发,就更应该做到统一,在eclipse中选择widnow -> preferences -> genreal -> workspace,在这里设置工作空间的字符编码,我通常都会设置成utf-8
1.1 最好的方式就是所有的都统一用一种编码,在所有jsp页面中设置编码为utf-8,这样可以很大程度上避免乱码。在jsp的开头设置编码
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>
2. 在前台向后台发送请求的时候也可能会出现中文乱码,这里又要分请求的方式,
2.1 若是采用get请求出现的中文乱码,那么就有两种解决方法:
第一种就是设置tomcat服务器的server.xml这个文件,找到下面的这个段代码,添加上URIEncoding="UTF-8",这种方法最简单
<Connector connectionTimeout="20000" port="8080" protocol="HTTP/1.1" redirectPort="8443" URIEncoding="UTF-8"/>
第二种就是在代码中使用String的构造方法转码,首先使用request.getParamter获取到参数,在用这个字符串构造出指定字符编码的String,eg:
new String(request.getParamter("xxx","utf-8")
若是在js中请求后台,也是使用get的方式请求,还可以使用javascript提供的encodeURI这个方法进行转码,然后再后台java中使用URLDecode.decode()进行解码,在java中有URLEncode.encode(),URLDecode.decode() 这个两个方法,一个是转码,一个是解码,对应的jsavascript中也有类似的两个方法。
2.2 若采用的是post方式请求后台出现乱码,也有几种方式解决:
第一种 使用request.setcharacterencoding这个方法设置请求内容的编码,这个方法只对post方式起作用就,自己也可以自己写一个过滤器来设置编码。
第二种 若项目中使用了Struts2,那么很简单,在struts.xml中配置一个参数
<constant name="struts.i18n.encoding" value="utf-8" />
第三种 若使用了spring也简单,配置一个spring中提供的拦截器:
<filter>
//过滤器使用spring类CharacterEncodingFilter
<filter-name>encodingFilter</filter-name>
<filter-class>
org.springframework.web.filter.CharacterEncodingFilter
</filter-class>
<init-param>
<param-name>encoding</param-name>
//过滤器过滤后的编码为utf-8
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
//过滤所有的路径:/*代表所有的路径
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
3. 从后台采用request.getWriter的流形式向前台写内容,若是出现乱码,采用response. setcharacterencoding设置编码,可以解决乱码,还可以采用response.setContentType("text/html; charset=utf-8")来设置页面的编码
4. 后台存入数据到数据库中也有可能会出现乱码,在取出来也就是是乱码,解决的方式就是设置数据库的字符编码,设置字符编码为utf-8,这个要看使用的什么数据库,这里说下mysql中设置数据库中的编码,在数据安装完成之后配置mysql数据库的字符编码为utf-8;若是数据库已经安装了可以到mysql的安装目录中找到配置启动方式:
java中可以出现的中文乱码的集中解决的更多相关文章
- java中Filter过滤器处理中文乱码的方法
注意问题:在学习用selvert的过滤器filter处理中文乱码时,在filter配置初始化时用了utf-8处理中文乱码,而在提交的jsp页面中却用了gbk.虽然两种都可以出来中文乱码,但是却造成了处 ...
- Java中常见的几个乱码问题以及解决方法
1.ajax--URL中的参数含中文,后台接受的参数出现乱码 解决方法: 第一步:在javascript中,对url进行两次编码 url = "http://localhost:8080/M ...
- Java中使用FileputStream导致中文乱码问题的修改方案
package com.pocketdigi; import java.io.File; import java.io.FileInputStream; import java.io.FileOutp ...
- java中get请求的中文乱码问题
表单采用Get方式提交,解决乱码的方法为: 方式一:手动解码 param = new String(param.getBytes("iso8859-1"), ...
- Java中FTPClient上传中文目录、中文文件名乱码问题解决方法【好用】
转: Java中FTPClient上传中文目录.中文文件名乱码问题解决方法 问题描述: 使用org.apache.commons.net.ftp.FTPClient创建中文目录.上传中文文件名时,目录 ...
- 中文乱码在java中URLEncoder.encode方法要调用两次解决
中文乱码在java中URLEncoder.encode方法要调用两次解决 一.场景: 1.我在客户端要通过get方式调用服务器端的url,将中文参数做utf-8编码,需要在js中两次的进行编码,服务器 ...
- jquery.ajax的url中传递中文乱码问题的解决方法
jquery.ajax的url中传递中文乱码问题的解决方法 JQuery JQuery默认的contentType:application/x-www-form-urlencoded 这才是JQu ...
- 处理SecureCRT中使用vim出现中文乱码问题
处理SecureCRT中使用vim出现中文乱码问题 引用原文:http://blog.chinaunix.net/uid-20639775-id-3475608.html因为cat没有问题,定位是vi ...
- 在Servlet中出现一个输出中文乱码的问题(已经解)。
在Servlet中出现一个输出中文乱码的问题,已经解. @Override public void doPost(HttpServletRequest reqeust, HttpServletResp ...
随机推荐
- 最长回文(Manacher)
HOT~ 杭电2015级新生如何加入ACM集训队? 最长回文 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K ...
- IE升级到10.0,VS2010启动调试时报“未能将脚本调试器附加到计算机..”
IE升级到10.0,VS2010启动调试时报“未能将脚本调试器附加到计算机..” 今天,在调试代码时,调试器弹出提示框,报:未能将脚本调试器附加到计算机XXX上的进程iexplore.exe . 已附 ...
- c# 获取指定目录下的所有文件并显示在网页上
参考文献: FileInfo 的使用 https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...
- C#中文件管理的运用(Twelfth Day)
又到了总结的时间了,今天在云和学院学习了文件管理的一些运用及复习昨天学的里氏转换.今天我就总结下昨天遗留下的问题以及今天所学的知识. 昨天遗留的问题 里氏转换(父类转子类) 例:在这里定义父类Peop ...
- 杭电ACM 偶数求和
偶数求和 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submi ...
- 198,House Robber
一.题目 You are a professional robber planning to rob houses along a street. Each house has a certain a ...
- How can you determine how much disk space a particular MySQL table is taking up?
http://stackoverflow.com/questions/6474591/how-can-you-determine-how-much-disk-space-a-particular-my ...
- VCC、VDD、VEE、VSS的区别
电路设计以及PCB制作中,经常碰见电源符号:VCC. VDD.VEE.VSS,他们具有什么样的关系那? 一.解释 VCC:C=circuit 表示电路的意思, 即接入电路的电压 VDD:D=devic ...
- Qt中的对象类型转换(Qstring 转换char*有三种方法)
char * 与 const char *的转换 char *ch1="hello11"; const char *ch2="hello22"; ch2 = c ...
- FLASH ROM与EEPROM的区别
EEPROM,虽然也叫“非易失性数据存储器”,但它不能直接参与ALU运算,只是用于掉电不丢失的数据存储. EEPROM和片内RAM 类似,也属于数据存储器,它的特点是数据掉电可保持,而程序存储器一般指 ...