中文乱码解决方案小结

中文乱码解决方案小结 | 楼主 | 2017-12-20 22:06:46 共有3个回复
  1. 1中文乱码解决方案小结
  2. 2JSP中文及传中文参数乱码解决方法小结
  3. 3JSP与MySQL交互的中文乱码解决方案及总结

如果还有乱码在中添加中文过滤器,服务器的设置如下修改目录下的,高等教育出版社这下更干脆什么都没有,高等教育出版社输入中文能够正确显示。

中文乱码解决方案小结2017-12-20 22:04:55 | #1楼回目录

1.确认工程编码是UTF-8

右击工程名,单击properties,单击Resource,把Text file encoding设置为UTF-8

2. 确认工作空间为UTF-8

单击windows->General->Workspace,把Text file encoding设置为UTF-8

3. 将jsp请求设置为UTF-8

在页头添加<%@page contentType="text/html; charset=UTF-8" %>

4. 将jsp响应设置为UTF-8

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

5. 如果还有乱码则在struts.xml中设置中文字符集:

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

6. 如果还有乱码,在web.xml中添加中文过滤器:

<filter>

<filter-name>CharacterEncoding</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>CharacterEncoding</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

7. 如果还有乱码,在Action中的response字符集设置为UTF-8:

ServletActionContext.getResponse.setCharacterEncoding("utf-8");

8. 如果还有乱码,则将服务器跳转配置设置为UTF-8:

resin服务器的设置如下,修改conf目录下的 http://baogao.oh100.com nf:

<web-app id='/' document-directory="E:\WorkSpace\StrutsDemo\WebRoot">

<character-encoding>utf-8</character-encoding><!--指定字符集编码-->

<work-dir>D:/tools/ http://baogao.oh100.com !--指定work工作目录-->

<temp-dir>D:/tools/ http://baogao.oh100.com !--指定临时工作目录-->

</web-app>

tomcat服务器设置如下,修改conf目录下的server.xml:

<Connector port="80" maxHttpHeaderSize="8192"

maxThreads="150" minSpareThreads="25" maxSpareThreads="75"

enableLookups="false" redirectPort="8443" acceptCount="100"

connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="UTF-8"/>

JSP中文及传中文参数乱码解决方法小结2017-12-20 22:04:02 | #2楼回目录

1、JSP页面乱码

这种乱码的原因是应为没有在页面里指定使用的字符集编码,解决方法:只要在页面开始地方用下面代码指定字符集编码即可,

2、数据库乱码

这种乱码会使你插入数据库的中文变成乱码,或者读出显示时也是乱码,解决方法如下:

在数据库连接字符串中加入编码字符集

String

Url="jdbc:mysql://localhost/digitgulf?user=root&password=root&useUnicode=true&characterEncoding=GB2312";

并在页面中使用如下代码:

response.setContentType("text/html;charset=gb2312");request.setCharacterEncoding("gb2312");

3、中文作为参数传递乱码

当我们把一段中文字符作为参数传递个另一页面时,也会出现乱码情况,解决方法如下:在参数传递时对参数编码,比如RearshRes.jsp?keywords=" + http://baogao.oh100.com .URLEncoder.encode(keywords)

然后在接收参数页面使用如下语句接收

keywords=new String(request.getParameter("keywords").getBytes("8859_1"));

response.sendRedirect("?gh=0001&xm=" + http://baogao.oh100.com .URLEncoder.encode("忘忧草"));String s=new String(request.getParameter("xm").getBytes("ISO8859_1"),"gb2312"); out.println(s);

4、JSP页面乱码加这句?

<%@ page contentType="text/html; charset=gb2312" language="java" import="java.sql.*" errorPage="err.jsp" %>

5、在form中用get方法传参乱码解决方法

如:

1、 login.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%>

<html>

<head>

<title>get传参乱码问题</title>

</head>

<body>

<form name="form1" action="login_do.jsp" method="GET">

<input type="text" name="username"/><br>

<input type="password" name="password"/><input type="submit" value="提交"/></form>

</body>

</html>

============

2、login_do.jsp

<%@ page language="java" contentType="text/html;charset=GBK"%>

<%

String temp=request.getParameter("username");

if(temp!=null){

temp=new String(temp.getBytes("8859_1"),"GBK");}

out.println(temp);

%>

JSP与MySQL交互的中文乱码解决方案及总结2017-12-20 22:05:24 | #3楼回目录

首先实现了一个StringConvert bean(GBtoISO()和ISOtoGB()两个方法),解决了与MySQL数据库交互的时候的部分中文乱码问题:在JSP程序中读取MySQL的中文内容,用这两个方法可以解决乱码问题。

但是从JSP写入到MySQL的中文内容都成了乱码,并且再读出来的时候也显示为“??”,在这里应该出现了编码转换过程中的字符信息丢失。郁闷的是,我在命令行窗口中登陆到MySQL后,执行如“INSERT INTO customer VALUES(''字符'',...)”这样的语句时,写入到数据表中的中文内容又是显示正常的!!!数据库使用的字符集是utf8。

碰壁多次,终于发现一条解决问题的路径:查看MySQL手册的时候,看到一条这样的语句:To allow multiple character sets to be sent from the client, the "UTF-8" encoding should be used, either by configuring "utf8" as the default server character set, or by configuring the JDBC driver to use "UTF-8" through the characterEncoding property.

此外,在查阅《MySQL权威指南》时,发现在查询语句中可以使用这样的语法将字符串转换到一个给定的字符集:_charset str。

其中charset必须是服务器支持的某个字符集。在本例中,shopdb数据库使用的默认字符集是utf8,于是开始测试:

先输入INSERT INTOpublish Values(''8'',_gb2312 ''高等教育出版社'') 写入后中文变成“??”

再试INSERT INTOpublish Values(''8'',_gbk ''高等教育出版社'') 结果同上

INSERT INTOpublish Values(''8'',_utf8 ''高等教育出版社'') 这下更干脆,什么都没有!!

快疯了!!没办法,用show character set;命令查看MySQL支持的字符集,心想我都试一遍总有一个能成功吧。浏览了一下,发现没有几个熟悉的字符集,就只剩下一个latin1(ISO-8859-1)比较常见了,不会是它吧,一试之下果然便是。

INSERT INTOpublish Values(''8'',_latin1 ''高等教育出版社'') 输入中文能够正确显示。

这下总算找到方法了,把Tomcat下配置的数据库连接池的url改为"...characterEncoding=UTF-8",然后把写入数据库的中文内容用

String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")进行转码,其中s1为中文字符串.然后再写入到数据库一切显示正常。

为解决这个问题查看了n多资料,现作一个总结:由于字符集和字符编码方式的不同,在OS以及程序之间传递数据(尤其是multiple character sets中的数据)时便会产生乱码以及字符信息的丢失.解决这个问题的关键便是了解数据输出端和接收端使用的字符集和字符编码方式,如果这两种编码方式不同,便需要在数据出口或入口处进行 转码。一般的说,在编写代码,编译,以及运行期间都

会字符数据的传递,因此需要特别小心。

在编写代码的时候,你可能会使用某种开发工具,例如我正在使用的Eclipse.或许在写的时候一切正常,可是一旦保存后再次打开文档,所有的中文字符都变成了乱码。这是因为在编写的时候,这些字符数据都在内存的某个stream中,ok,这没问题,可是保存的时候这个stream中的数据会被写入到硬盘,使用的就是你的开发工具默认的编码方式,如果很不幸你的开发工具默认编码方式是ISO-8859-1,中文字符信息就不能正确地存储。Eclipse中可以这样查看并修改默认字符编码方式:Project->Properties->info,这里有"default

encoding for text file"。如果设置为GBK,那么编写代码并保存这关就过了。

对于JSP程序而言,编写完代码后就交给Container,首先它们会被转成.java文件,然后编译成.class才能提交给服务器执行.这个过程也存在字符编码问题.java编译器(javac)使用操作系统的语言环境作为默认的字符编码方式,JRE(Java Runtime Environment)也是这样。只有当编译和运行环境的字符编码方式与存储源文件的编码方式相同时,中文字符才能正确地显示。否则就需要在运行时进行转码,使它们使用兼容的编码。这里的设置可以分为几个层次:操作系统层支持的语言,这是最重要的,因为它会影响JVM的默认字符编码方式,同时对字符的显示,如字体等有直接影响;J2EE服务器层,大多数服务器都可以对字符编码进行自定义的配置,例如Tomcat就可以通过web.xml中设置javaEncoding参数设置字符编码,默认是UTF-8.

IE也可以设置成总是使用UTF-8编码来发送请求.应用程序层,每个配置在服务器下的程序都可以设置自己的编码方式,这个我目前还没有用到,以后再学习。

运行时的转码,运行时期,应用程序很可能需要与外部系统进行交互,例如对数据库进行读写,对外部文件进行读写.在这些情况下,应用程序免不了要和外部系统进行数据交换。那么对于中文字符, 数据出入口的编码方式就显得特别重要了。一般外部系统都有自己的字符编码方式,我的例子中配置的MySQL就是使用的UTF-8编码。JSP页面通过设定"charset=gb2312",

使用gb2312编码,在它与数据库交互的时候就需要进行显式的转码才能正确处理中文字符。

回复帖子
标题:
内容:
相关话题
相关帖子推荐