|
锁定老贴子 主题:请问如何解决中文问题
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
|---|---|
| 作者 | 正文 |
|
最后更新时间:2004-11-25
我搜索了论坛中有关中文问题的帖子,没有发现一个最终的解决方法。以前我从来不觉得有中文问题的存在(可能是我的做法避免出现了一些问题),直到今天才发现其实我依然没有解决这个问题。
我以前的做法是这样的(我用的mysql): 1.页面采用: [code:1]<%@ page contentType="text/html;charset=ISO_8859_1"%>[/code:1] 2.不采用任何filter 3.不采用: [code:1]jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK[/code:1] 而是直接使用: [code:1]jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true [/code:1] 在这样的情况下,我在jsp页面中使用中文,插入数据库中也是中文,从数据库读出后显示在jsp上也是中文。 但是今天我偶尔在我的servlet(struts中的Action)中写了一句中文,然后执行数据库操作代码后,发现数据库中是乱码,再从数据库中读出的也是乱码。 我尝试了很多论坛中提示的方法,包括设置url,使用filter,始终无法做到jsp和servlet同时中文正确。希望有类似经验的朋友,提供一下解决的方法。 声明:JavaEye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-25
最近也在搞MYSQL,也有中文问题,于是上网搜寻解决方案。
不知道你用的是什么版本的! 你可以在 my.ini中修改default-character-set=gbk;试试!记得重启服务器! 我还没有试过 下班回去再试 |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-26
一般的中文解决办法都是从request和response两个方面着手的。通常的解决办法可能正好和楼主相反是:
1。reqeust用filter来设置reqeust 的CharacterEncoding是最方便的的办法。不然的话你要每个jsp,servlet都要设置,烦死你。 2。response只能在每个jsp里写<%@ page contentType="text/html;CHARSET=utf8"%>,servlet里写response.setContentType(text/html;CHARSET=utf8); 3。数据库里应该指定编码,如mysql用jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK 这样应该不会再出中文问题了 |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-26
你的系统应该是中文环境,可以把你的那个servlet用8859-1来编译即可,或者直接把中文转码。
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-28
引用 一般的中文解决办法都是从request和response两个方面着手的。通常的解决办法可能正好和楼主相反是: 1。reqeust用filter来设置reqeust 的CharacterEncoding是最方便的的办法。不然的话你要每个jsp,servlet都要设置,烦死你。 2。response只能在每个jsp里写<%@ page contentType="text/html;CHARSET=utf8"%>,servlet里写 response.setContentType(text/html;CHARSET=utf8); 3。数据库里应该指定编码,如mysql用jdbc:mysql://127.0.0.1:3306/test?autoReconnect=true&useUnicode=true&characterEncoding=GBK 这样应该不会再出中文问题了 我按照你介绍的方法试了以下,发现在jsp输入的中文存到数据库中还是乱码。不知道是我的filter写的问题还是什么其它的问题,我也不清楚。 我在页面的编码中设置ISO_8859_1是有道理的,因为我认为,页面提交的时候,由于它是ISO_8859_1格式的,而数据库也是ISO_8859_1格式的,所以它没有做任何的编码转化,你在页面上输入什么,写到数据库里面就是什么,在这种情况下,没有任何从输入角度的编码格式问题。同时,从数据库取出时,也没有作任何的编码转化,显示到JSP页面中,页面是ISO_8859_1,所以原封不动把读出的数据显示出来,这样也不会有中文问题。 我所理解的servlet中的编码问题可能是由于我的eclipse在默认情况下,把servlet当作GBK编译了,于是出现了编码格式与数据库不一致。明天我可能去单位里面试一下把servlet用ISO_8859_1格式编译成class文件试试,可能就会好了。 谢谢大家的回复。如果有其它的方法大家一起讨论以下吧。 |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-30
有谁用过tapestry解决过MYSQL编码问题的吗?
|
|
| 返回顶楼 | |
|
最后更新时间:2004-11-30
从根本上解决中文问题可以分两个步骤:
1. 从页面插入到数据库,数据库要正确显示中文. 2. 从数据库取得的数据在页面上要正确显示中文. 解决1. 大多数数据库都是以ISO-8859,先将 SQL 语句按系统缺省编码方式转化为字节数组,再按“ISO-8859-1”编码方式转化为 STRING ,最后送去执行,则中文信息可正确写入数据库。 String name = request.getParameter("name"); String sql_name = new String(name.getBytes(),"ISO-8859-1"); String sql = "insert into test(name) values('" + sql_name + "')"; 这步可以用Filter来解决! 解决2. 与第一步相反即可!将数据按“ISO-8859-1” 编码方式转化为字节数组,再按系统缺省编码方式转化为 STRING. String name = rs.getString("name"); String html_name = new String(name.getBytes("ISO-8859-1")); out.println(html_name); *注 : 我用的是tapestry 页面是默认的utf-8 |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-30
楼上, 你这个方法在Tapestry中解决了页面编码是UTF-8时的乱码问题吗? 下班回去后试一下看.这个问题郁闷我很久了.
之前我也有做过在后台转码来着. 但是前台依旧是乱码. http://forum.javaeye.com/viewtopic.php?t=9080 吃饭回来重新又试了一遍. 还是不行... |
|
| 返回顶楼 | |
|
最后更新时间:2004-11-30
引用 从根本上解决中文问题可以分两个步骤: 1. 从页面插入到数据库,数据库要正确显示中文. 2. 从数据库取得的数据在页面上要正确显示中文. 解决1. 大多数数据库都是以ISO-8859,先将 SQL 语句按系统缺省编码方式转化为字节数组,再按“ISO-8859-1”编码方式转化为 STRING ,最后送去执行,则中文信息可正确写入数据库。 String name = request.getParameter("name"); String sql_name = new String(name.getBytes(),"ISO-8859-1"); String sql = "insert into test(name) values('" + sql_name + "')"; 这步可以用Filter来解决! 解决2. 与第一步相反即可!将数据按“ISO-8859-1” 编码方式转化为字节数组,再按系统缺省编码方式转化为 STRING. String name = rs.getString("name"); String html_name = new String(name.getBytes("ISO-8859-1")); out.println(html_name); *注 : 我用的是tapestry 页面是默认的utf-8 我觉得页面上的中文问题我觉得不难解决,主要是servlet中的中文问题,dengyin2000不知道你有没有在servlet中试试写中文。 另外,你的filter到底怎么写的?为什么我用filter就不成功呢? |
|
| 返回顶楼 | |
|
最后更新时间:2004-12-01
按dengyin2000的说法,是可以解决中文问题。
可是,如果我输入时不编码呢,那我能正确读出中文吗?我的MySQL默认字符集latin1,试了几个,不行。 可到了SqlServer那里,如果我不编码,到可以正确读出中文,再按dengyin2000的说法就不行了,怎么回事? 现在用mysql就在url后加上编码格式,用sqlserver,就把一些中文字段改成nvarchar的。 知其然而不知其所以然 |
|
| 返回顶楼 | |











