讨论:关于中文问题的讨论
小弟英语较差,在给老婆挣RMB的时候,一不小心碰上了另人恶心的中文问题。
前提,所有的jsp页面都是gbk编码,数据库也是gbk编码。
问题如下:
问题1。我用的是struts框架,表单项中的东西不能提交。一提交就是乱码
解决:写了一个过滤器,改变request的编码方式,顺利解决。过滤器的编码方式是GBK
问题2。我用表单想上传图片,也顺便想上传点图片的说明。。。中文问题再次出现。。。。(图片用post方法传,文字用get方法传),经过上面的过滤器
解决:服务器的get方法的中文解决,修改了服务器的配置,顺利解决get方法传递中文。
问题3。我用表单上传图片,也上传图片说明——(图片和文字同用一个form的post方法提交),中文问题又来!!!经过上面的过滤器
解决:在后台按名字取出文字内容,进行编码转换。到这里,问题就暴露出来了一小部分。
我在进行编码转换的时候,发现,如果直接用语句
new String(msgto.toString().getBytes(),"UTF-8")
发现,只要传上来的是单数个中文时,在最后一个字符就会变成?,当是双数个字符时,就会完全显示,当然,我用的是UTF-8的编码。我问过公司的几位老大了,老大们都比较扣,不告诉我。还有的说是UTF-8的编码有问题。有一个老大说得比较好,表单的东西已经经过了一次过滤器的“GBK”的编码转换,会在字符串最后有一个小尾巴,再想经过“UTF-8”转化的时候,就显示不出来最后一个,但,为什么只有单数个显示不出来时。。。没答案了。。。。。
下面还有一个问题。。。。上面说到写了一个GBK编码的过滤器,这个过滤器可不一般呀。。。我仔细一研究,把过滤前和过滤后的request的编码方式打印出来一看,把我给吓着了,过滤前的request的编码方式都是null,而经过过滤器以后,都是GBK,所以,现在的问题也就很明白了,是我页面上的提交的请求的编码方式在服务器端给丢了。。。。。。不知道哪位高手知道,怎么在把页面上的请求发送到服务器端的时候,请求的编码方式不丢,或者还在
尝试1:<%@ page contentType="text/html; charset=GBK" pageEncoding="GBK"%>页面上添加
尝试2: <%
request.setCharacterEncoding("GBK");
response.setCharacterEncoding("GBK");
%>
尝试3:<META http-equiv="Content-Type" content="text/html;charset=GBK" />
上面三种方法都已经尝试过了,并不能解决请求提交的编码为null的情况,不知道哪位高手点拨一下。。。老婆催得紧,我也是没办法了。。。各位,帮帮忙。。!!!!