数据库及页面乱码问题

 

目录

MySQL乱码问题

1、页面编码和文件编码

2、控制器/过滤器(filter)

3、数据库及表格编码

4、字符流编码

5、Tomcat编码

6、外部文件编码


MySQL乱码问题

1、页面编码和文件编码

JSP、HTML页面头部以及文件编码设置字符编码格式为UTF-8。

(1)在JSP页面头部指定编码方式为UTF-8; 

<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

(2)在HTML页面头部指定编码方式为UTF-8; 

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

 

(3)设置已有文件的编码方式

  • 如果使用的开发工具是IDEA,则在页面右下角可以看到文件的编码方式,如果编码方式的图标为灰色,则无法修改编码格式,如果其颜色不是灰色且其右侧有上下方向的三角形形状,点击它,可以修改编码方式。

注意:该方式只对正在进行的单个文件有效,如果有多个文件需要进行设置,则需要对相应的文件重复此操作。

  • 如果使用的开发工具是Eclipse,则在菜单栏单击【File】,在弹出的窗口中点击【Properties】(或者使用Alt+Enter快捷键),在Text file Encoding区域设置编码方式,设置完成后,先点击Apply应用,再点击OK。

注意:该方式只对正在进行的单个文件有效,如果有多个文件需要进行设置,则需要对相应的文件重复此操作。

详见:IDEA和Eclipse设置文件的编码格式 

 

2、控制器/过滤器(filter)

(1)servlet设置页面请求和回应的编码:

request.setCharacterEncoding("utf-8");  [一般用于post请求方式]


response.setCharacterEncoding("utf-8"); 


(2)如果是struts2

struts.xml中添加如下语句:

 

<constant name="struts.i18n.encoding" value="utf-8" />


(3)如果使用了spring框架

web.xml配置中,设置初始化参数

<filter>
  <filter-name>yk</filter-name>
  <filter-class>com.servletlx.filter.YkFilter</filter-class>


  <init-param>
  <param-name>encoding</param-name>
  <param-value>UTF-8</param-value>
  </init-param>


  </filter>

 


 

public class YkFilter implements Filter{

             //其他代码未全部写出,这里只写出和编码相关的语句

private String encoding = null;//定义表示编码方式的变量

@Override
             public void init(FilterConfig arg0) throws ServletException {
             // 获取初始化参数,只执行一次
            encoding = arg0.getInitParameter("encoding"); //获取参数的值,该值表示编码的方式
             }

 

           @Override
          public void doFilter(ServletRequest arg0, ServletResponse arg1,FilterChain arg2) throws IOException, ServletException {
                   //三个参数:请求,回应,过滤链
        HttpServletRequest request = (HttpServletRequest)arg0;
        HttpServletResponse response = (HttpServletResponse)arg1;
        request.setCharacterEncoding(encoding); //参数代表编码的方式
        response.setCharacterEncoding(encoding);

        .............

        }

 

}

 

3、数据库及表格编码

第一:保证数据库的编码方式为UTF-8;

 

第二:保证数据表的编码方式为UTF-8;

 

第三:使用jdbc连接数据库时,在URL中添加useUnicode参数(useUnicode=true表示使用Unicode字符集)和characterEncoding参数(characterEncoding=utf8,当useUnicode设置为true时,指定字符编码)

 

如:jdbc:mysql://localhost:3306/database_name?useUnicode=true&characterEncoding=utf8"

 

数据库及数据表的编码格式查看及修改请查看:MySQL相关命令

 

4、字符流编码

String string = request.getParametes('sname');

 

  //把得到的值转换为原始编码,再转换为UTF-8编码

 

  string=new String(string.getBytes("iso8859-1"),"UTF-8");  [一般用于get请求]

5、Tomcat编码

想通过get请求带中文数据也不会出现乱码,还需要编辑Tomcat的编码

 

server.xml文件中,在端口号8080后添加编码格式  URIEncoding=”utf-8”

 

    <Connector executor="tomcatThreadPool"

               port="8080" protocol="HTTP/1.1"

               connectionTimeout="20000"

               redirectPort="8443"  URIEncoding=”utf-8” />

 

6、外部文件编码

如果在Java开发的过程中,使用到外部文件,比如读取TXT文件中的内容在表单的下拉框中显示,则需要设置TXT文件的编码方式为UTF-8;

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值