1. 开发环境乱码 -- eclipse或ant编译乱码将java系统默认的字符集cp1253 改成GBK 修改控制面板--区域与语言
否则在用ant运行java程序的时候会出现编码的错误
原因是
java 在运行时会调用系统的默认配置文件Properties();
其中 有个ding 的属性决定编码集,如果是英文版的操作系统则ding=CP1253
所以ant 运行中文程序会乱码
如果不想修改系统默认字符集的话,可以再ant java target中加入下面语句
<javac srcdir="${project.src}"
destdir="${project.output.build}"
否则在用ant运行java程序的时候会出现编码的错误
原因是
java 在运行时会调用系统的默认配置文件Properties();
其中 有个ding 的属性决定编码集,如果是英文版的操作系统则ding=CP1253
所以ant 运行中文程序会乱码
如果不想修改系统默认字符集的话,可以再ant java target中加入下面语句
<javac srcdir="${project.src}"
destdir="${project.output.build}"
debug="on" encoding="UTF-8"
deprecation="on"
listfiles="on"
includeAntRuntime="no">
<compilerarg value="-Xlint:all"/>
<classpath refid="project.classpath"/>
<classpath refid="tomcat.classpath"/>
</javac>
<java classpathref="project.classpath" classname="se.ParserEnglish" fork="true" failonerror="true">
<sysproperty key="ding" value="UTF-8"/>
<arg value="-h"/>
</java>
deprecation="on"
listfiles="on"
includeAntRuntime="no">
<compilerarg value="-Xlint:all"/>
<classpath refid="project.classpath"/>
<classpath refid="tomcat.classpath"/>
</javac>
<java classpathref="project.classpath" classname="se.ParserEnglish" fork="true" failonerror="true">
<sysproperty key="ding" value="UTF-8"/>
<arg value="-h"/>
</java>
2. web开发乱码
2.1 解决响应中的乱码
何为响应中的乱码?把页面中的“username”改成“用户名”你就知道了。
所谓响应中的乱码,就是显示页面上的乱码,因为页面数据是从服务器一端放入响应(response)中,然后发送给浏览器,如果响应中的数据无法被正常解析,就会出现乱码问题。
解决方法
在http的响应(response)中添加编码信息,使用如下方式:
<%@ page contentType="text/html; charset=gb2312"%>
这段要放在jsp页面的第一行,用来指定响应的类型和编码格式,contentType为text/html就是html内容,charset表示编码为gb2312。这样浏览器就可以从响应中获得编码格式了。
还需要在html中指定编码格式。
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>title</title>
</head>
2.1 POST乱码因为发送请求的时候,使用的编码是iso-8859-1,意味着只有英文是有效字符
把form里加上method="POST",让form提交的时候使用POST方式。
怎么解决呢?我们要jsp最前面加上一条java语句,设置请求的字符编码。
<%
request.setCharacterEncoding("gb2312");
%>
2.2. GET乱码
直接点击超链接,form的默认提交方式都是GET。
java语言使用的字符码集是POST方式下的解决方式还算简单,因为POST方式下提交的数据都是以二进制的方式附加在http请求的body部分发送,只需要在后台指定编码格式就足矣解决。
GET方式下会将参数直接附加到url后面,这部分参数无法使用request.setCharacterEncoding()处理,结果就是get形式的所有中文都变成了乱码。
<%
String username = Parameter("username");
byte[] bytes = Bytes("iso-8859-1");
String result = new String(bytes, "gb2312");
out.print(result);
%>
3.使用spring解决乱码问题
利用spring自定义的CharacterEncodingFilter,使用方式如下。
在l文件中添加
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
//过滤器的实现代码
protected void doFilterInternal( HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { if (ding != null && (this.forceEncoding || CharacterEncoding() == null)) { request.ding); if (this.forceEncoding && responseSetCharacterEncodingAvailable) { response.ding); } } filterChain.doFilter(request, response); } |
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论