天天看点

编码问题解决方案

首先明确为什么会出现乱码:

编码问题解决方案

1.客户端发送请求,浏览器将数据进行打包(默认utf-8),然后发送至服务器

2.服务器对接收的数据进行解码(默认为iso-8859-1),然后将数据进行处理,最后打包传回浏览器

3.浏览器将传回的数据包进行解码显示,完成一次连接交互。

在这一过程中应该确保所有步骤的编码或解码方式保持一致,否则就会出现乱码问题。

一、表单的中文问题

浏览器对表单中的数据(非ascii字符)会进行编码。所使用的编码是打开该表单所在的页面时所使用的编码。

1、 静态页面(html)编码问题

使用

<meta http-equiv="content-type" content="text/html;charset=utf-8">

指定打开页面时的编码。

2、 Jsp页面编码问题

在JSP页面上输入中文,请求页面后不出现乱码。应该保证:

contentType="text/heml;charset=UTF-8"pageEncoding="UTF-8" charset和pageEncoding

的编码一致,且都支持中文,通常建议取值UTF-8

还需要保证浏览器的显示的字符编码也和请求的JSP页面的编码一致

3、servlet中编码问题

获取中文参数值:默认参数在传输过程中使用的编码为ISO-8859-1

①对于POST请求:在获取请求信息之前(调用request.getParameter() 或者是 request.getRead())使用request.setCharacterEncoding(“utf-8”)即可

②对于GET请求:前面的方式对于GET无效,可以通过修改Tomcat的server.xml文件的方式,修改方式下文提到

//指定request对象解码时所使用的编码格式。
a. request.setCharacterEncoding("utf-8");
b.如果要输出数据到浏览器,还要使用
response.setContentType("text/html;charset=utf-8");
           

4、 如果要保存数据到数据库

a. 创建数据库时,使用:

create database cc default 
character set utf8;
           

b. jdbc驱动程序,指定数据库编码,即告诉驱动程序,当前数据库保存数据所使用的

编码是什么。

jdbc:mysql://localhost:3306/cc?
useUnicode=true&characterEncoding=utf8
           

二、链接地址包含中文 (GET方式)

浏览器会对链接地址中的中文(包含其它ascii字符以外的字符,比如日文,部分的拉丁字符)进行编码,默认采用采用utf-8编码。

服务器端默认情况下采用iso-8859-1解码。此时,可以通过设置配置文件的方式,告诉服务器采用指定的编码来解码。

tomcat_home/conf/server.xml 添加 URIEncoding=”utf-8”,作用是:服务器

对于get请求,采用“utf-8”来解码。

三、请求参数当中包含中文

请求参数当中包含中文,浏览器也会编码,所使用编码与打开该页面时的编码一致。  

方案一:

  保证页面打开时的编码与URIEncoding的设置一致。

方案二:

  如果页面打开时的编码与URIEncoding的设置不一致,可以

<a href="xxx?name=<%=URLEncoder.encode("中文","编码")%>"></a>
           

继续阅读