1. 开发环境乱码 -- eclipseant编译乱码java系统默认的字符集cp1253 改成GBK  修改控制面板--区域与语言

否则在用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>



2. web开发乱码

2.1 解决响应中的乱码
何为响应中的乱码?把页面中的username”改成用户名你就知道了。
所谓响应中的乱码,就是显示页面上的乱码,因为页面数据是从服务器一端放入响应(response)中,然后发送给浏览器,如果响应中的数据无法被正常解析,就会出现乱码问题。
解决方法
http的响应(response)中添加编码信息,使用如下方式:
<%@ page contentType="text/html; charset=gb2312"%>
这段要放在jsp页面的第一行,用来指定响应的类型和编码格式,contentTypetext/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小时内删除。