apache2.2 转发 post 乱码:apache22+tomcat6+struts2+mysql5.1

crazylaa 2010-06-10 06:12:20
描述:
已做的设置:
1.mysql utf8,包括url已加characterEncoding=utf8
2.所有配置文件 utf8编码
3.struts2 utf8已配(默认就是)
4.tomcat URIEncoding="UTF-8" 已配
5.jsp已写<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%>

在未用apache转发之前,普通form 用POST方式提交,不会乱码,enctype="multipart/form-data"也不会.

使用apache之后,
加了enctype="multipart/form-data"的form post提交到后台的数据编码正常.
未加enctype="multipart/form-data"的普通form post提交后数据中文乱码.

可以预见的是:数据库方面编码没有问题.tomcat接收数据编码也没有问题(未用apache之前正常).

google了一堆,都说修改httpd.conf,但是找了httpd.conf,以及它包含的extra/httpd-languages.conf文件,并没有描述所说的
addDefaultCharset utf8之类的选项添加进去,因此认为apache采用了页面编码,但我的页面编码是utf8,按理来说没有问题.(网上说不设置,则apache会检测请求head的meta项,为了测试,我把jsp头部的 contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"明文写到meta里面去,还是一样不行.)


第一次用apache,出现这个问题,头痛了,望大虾不吝赐教:
apache是否对数据进行了编码?它的默认编码是啥?
如果我的普通form post提交,不加enctype="multipart/form-data",如何使之不乱码?(是否httpd.conf加上addDefaultCharset utf8就可以?测试组已经在测试,因此不能乱改一天也就改个两次配置.)

望有经验的多多发言,thx!

顶者有分,不论有没有答案,明天下班前来结.
...全文
642 29 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
29 条回复
切换为时间正序
请发表友善的回复…
发表回复
robert_bauer 2011-12-27
  • 打赏
  • 举报
回复
27楼正解
rlini 2011-09-05
  • 打赏
  • 举报
回复
你的struts2是2.1.6版本的么?
yuanligang12 2010-11-23
  • 打赏
  • 举报
回复
这个问题终于解决了在tomcat中修改配置
<Connector port="8085" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"
<!-- 防止中文乱码 -->
useBodyEncodingForURI="true" URIEncoding="UTF8" />

<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"
<!-- 防止中文乱码 -->
useBodyEncodingForURI="true" URIEncoding="UTF8" />
即可解决
yuanligang12 2010-11-22
  • 打赏
  • 举报
回复
我也碰到了 请大虾解决一下
crazylaa 2010-06-12
  • 打赏
  • 举报
回复
昨天喝多了,今天来结.
问题没答案....唉....
meander 2010-06-12
  • 打赏
  • 举报
回复
[Quote=引用楼主 crazylaa 的回复:]
描述:
已做的设置:
1.mysql utf8,包括url已加characterEncoding=utf8
2.所有配置文件 utf8编码
3.struts2 utf8已配(默认就是)
4.tomcat URIEncoding="UTF-8" 已配
5.jsp已写<%@ page language="java" contentType="text/html; charset=UTF-8……
[/Quote]
没用过帮顶
xiaochengfu1 2010-06-12
  • 打赏
  • 举报
回复
每天回帖即可获得10分可用分!
jumpheightway 2010-06-11
  • 打赏
  • 举报
回复
用过滤器把编码处理一下不就行了
gulang76 2010-06-11
  • 打赏
  • 举报
回复
国内很多CMS都是GBK编码,一用上Linux主机就乱码了,但通过浏览器选择GBK编码可以正常访问,这是因为APACHE默认添加了utf-8编码.

在站点根目录下的.htaccess文件中添加下面一行即可.

AddDefaultCharset off

这里是因为apache的配置文件/etc/httpd/conf/httpd.conf中有这么一句

AddDefaultCharset UTF-8

除了关闭Apache默认编码,你可以考虑将utf-8改为GBK,也就是

AddDefaultCharset GBK

网上都是这样说的
gulang76 2010-06-11
  • 打赏
  • 举报
回复
原因很简单,由于Apache它默认的编码是西欧编码,你只要在“httpd.conf”中找到“AddDefaultCharset ISO-8859-1”将它修改为“AddDefaultCharset GB2312 ”,保存然后重新启动Apache再试,可能有的朋友的已经解决了,但还是有很多的朋友的网站依然是乱码,包括我的,这是什么原因呢,网上也有介绍把它改为“AddDefaultCharset off ”,可能在你的网站也不一定行得通,实质问题在于它是由网页制作软件引起的,如果你使用的是Macromedia公司的Dreamweaver系列软件制作的,由于它的编码为“gb2312”,所以就会出现乱码,因此你只要在你网页的代码中找到“”,把“gb2312”改为“GB2312”然后保存网页,再试试看,行了吧!

这个行不?
dbx915 2010-06-11
  • 打赏
  • 举报
回复
没用过apache,友情帮顶……
crazylaa 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 qiheia 的回复:]

试下这2种方法:
1: getString(“编码”)
2: ServletFileUpload servletFileUpload = new ServletFileUpload();
servletFileUpload.setHeaderEncoding("UTF-8");
[/Quote]

多谢回复,希望能通过apache的配置来解决.

代码没有问题,没用apache之前是OK的,说明apache转发请求,出现编码问题了.
crazylaa 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 21 楼 fengfenglucky 的回复:]

估计是apache的配置文件有问题,楼主可以这样:
把AddDefaultCharset设置为off,这样就关掉了服务器的默认语言的发送,而仅凭html文件头中设置的语言来决定网页语言,这样就不会出现乱码问题了。
给你一个参考的网页:http://www.ctohome.com/FuWuQi/15/305.html
希望你能顺利解决问题!
[/Quote]

现在就是这样的,关了apache的,其他都是utf8,还是乱.....所以才折磨人....
  • 打赏
  • 举报
回复
估计是apache的配置文件有问题,楼主可以这样:
把AddDefaultCharset设置为off,这样就关掉了服务器的默认语言的发送,而仅凭html文件头中设置的语言来决定网页语言,这样就不会出现乱码问题了。
给你一个参考的网页:http://www.ctohome.com/FuWuQi/15/305.html
希望你能顺利解决问题!
crazylaa 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 weihao9939 的回复:]

我觉得不是Apache的问题
你在Tomcat中(web.xml)配置过滤器试试
[/Quote]

配了过滤器了,没个毛用,头大了,乃乃的...
实在想不出还有哪里有问题.

晕.
weihao9939 2010-06-11
  • 打赏
  • 举报
回复
我觉得不是Apache的问题
你在Tomcat中(web.xml)配置过滤器试试
z2008g 2010-06-11
  • 打赏
  • 举报
回复
有些字节码用utf8它不能显示为中文吧,但是如果用GBK之类的,一般都能,所以改为GBK好啊
crazylaa 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 ivorytower 的回复:]

apache的httpd.conf中的AddDefaultCharset可以设置为空,没有必要指定值,除非那台服务器上只有某编码的网站。所以应该不是这个问题吧。
[/Quote]

是的,初始是没有任何设置的.那个时候就乱来了.


  • 打赏
  • 举报
回复
apache的httpd.conf中的AddDefaultCharset可以设置为空,没有必要指定值,除非那台服务器上只有某编码的网站。所以应该不是这个问题吧。
crazylaa 2010-06-11
  • 打赏
  • 举报
回复
[Quote=引用 14 楼 stl0 的回复:]

在httpd.conf下,有没有以下设定

AddDefaultCharset  ISO-8859-1

有的话,直接删掉,再试一下看看?
[/Quote]

描述说了:
没有这个设置.
而且昨天已经分别试过了
AddDefaultCharset  utf8

AddDefaultCharset  off

均不起作用
加载更多回复(9)

81,122

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧