• 常见乱码解决


    乱码问题应该是做javaWeb开发人员都遇到过的问题吧,这个问题当时还影响了我学习java的想法,甚至有过想放弃的想法,没办法,当时年轻,呵呵。其实产生乱码问题的原因有很多,解决乱码的问题也有很多,现在就一一来看一下:

    出现乱码的地方大致可以分为以下三种:

    1 jsp页面中 
    2 jsp页面之间相互传参的参数
    3 与数据库中数据的存取
    解决方案大致可以分为三种:

    1 出现在jsp页面中,是由于没有设置jsp页面的中文字符编码。
    2 出现在jsp页面之间相互传参,是由于参数没有设置正确的字符编码。
    3 以上2个问题解决了,那么存到数据库中,自然就不存在乱码。除非你对存入到数据库里的数据再次进行编码。

    具体的解决方法:

    1.在表单页面头部设置字符编码为utf-8
    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"%>

    加上这句解决jsp页面中的中文乱码显示,tomcat编译完后向客户端输出的html文件不是采用中文编码,所以会导致乱码产生。


    2.设置页面请求和回应的编码:

    <%request.setCharacterEncoding("utf-8");

    response.setCharacterEncoding("utf-8"); %>

    加上这句解决jsp页面中的中文参数传递乱码。把浏览器默认使用的编码设置为“UTF-8”发送请求参数。

    3.String(request.getParameter("name").getBytes("ISO8859_1"),"utf-8");这句的意思是,把传来的参数全部编码转换成utf-8,这样做的缺点是每次传来一个参数都要这样写,很麻烦。

    同样可通过设置server.xml配置文件来实现。

    [html] view plaincopyprint?

    1. < Connector

    2. port ="8080"

    3. maxHttpHeaderSize ="8192"

    4. maxThreads ="150"

    5. minSpareThreads ="25"

    6. maxSpareThreads ="75"

    7. enableLookups ="false"

    8. redirectPort ="8443"

    9. acceptCount ="100"

    10. connectionTimeout ="20000"

    11. disableUploadTimeout ="true"

    12. URIEncoding ="utf-8"/>



    但是这样就应用到整个webapp中去了。

    4.还可以修改web.xml文件,配置一个过滤器。其原理都一样,只是换种方式而已

    1.编写过滤器类:

    [html] view plaincopyprint?

    1. package org.RN.util;

    2. import java.io.IOException;

    3. import javax.servlet.Filter;

    4. import javax.servlet.FilterChain;

    5. import javax.servlet.FilterConfig;

    6. import javax.servlet.ServletException;

    7. import javax.servlet.ServletRequest;

    8. import javax.servlet.ServletResponse;

    9. public class Encoding implements Filter {

    10. @SuppressWarnings("unused")

    11. private FilterConfig config=null;

    12. String encoding=null;

    13. public void destroy() {

    14. this.encoding=null;

    15. this.config=null;

    16. }

    17. public void doFilter(ServletRequest request, ServletResponse response,

    18. FilterChain chain) throws IOException, ServletException {

    19. if(encoding!=null)

    20. request.setCharacterEncoding(encoding);

    21. chain.doFilter(request, response);

    22. }

    23. public void init(FilterConfig arg0) throws ServletException {

    24. this.config=arg0;

    25. this.encoding=arg0.getInitParameter("encoding");

    26. }

    27. }



    2.在web.xml配置

    [html] view plaincopyprint?

    1. <filter>

    2. <description>缓存过滤</description>

    3. <filter-name>Encoding </filter-name>

    4. <filter-class>

    5. filter.Encoding

    6. </filter-class>

    7. </filter>

    8. <filter-mapping>

    9. <filter-name>Encoding </filter-name>

    10. <url-pattern>*</url-pattern>

    11. </filter-mapping>

    [html] view plaincopyprint?

    1. </filter>



    5.还有一种常见的乱码问题就是下载时出现文件名乱码

    原来处理下载的代码如下:
    response.setHeader("Content-Disposition", "attachment; filename=" + java.net.URLEncoder.encode(fileName, "UTF-8"));

    URLEncoder类包含将字符串转换为application/x-www-form-urlencoded MIME 格式的静态方法。

    URLDecoder与URLEncoder 类相对应的URLDecoder 类有两种静态方法。它们解码以x-www-form-url-encoded这种形式编码的string。也就是说,它们把所有的加号(+)转换成空格符,把所有的%xx分别转换成与之相对应的字符.

  • 相关阅读:
    javascript通用循环遍历方法forEach
    伪数组
    引用和基本类型
    谈谈Javascript的this指针
    理解内存分配
    理解undefined和null
    getElementsByClassName实现
    NSubstitute完全手册(十五)自动递归模拟
    NSubstitute完全手册(十七)参数匹配器上的操作
    NSubstitute完全手册(九)检查接收到的调用
  • 原文地址:https://www.cnblogs.com/jgig11/p/4169506.html
Copyright © 2020-2023  润新知