STRUTS POST亂碼 GET正常

daocha 2010-10-30 09:42:44
很奇怪,我WEB端用的是UTF-8 頁面也是UTF-8 數據庫也是UTF-8 現在沒操作數據庫

我傳一個文件上去到import.do 在web端解析后 將結果輸出到JSP上面去, JSP上面顯示是正常的,不亂碼,但是把這個表單再次提交到importSubmit.do , 表單用的是POST提交的 到web端輸出后輸出發現是亂碼 我改用GET提交就不是亂碼,這是怎麼回事呢。平常看人家都是說GET亂碼 POST正常

我用了過濾器 全部加了

request.setCharacterEncoding("utf-8");
response.setCharacterEncoding("utf-8");

還是沒用,暈了
...全文
354 25 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
25 条回复
切换为时间正序
请发表友善的回复…
发表回复
JavPer 2010-11-08
  • 打赏
  • 举报
回复
post乱码过滤器是100%可以搞定的吧!
孤独剑客 2010-11-08
  • 打赏
  • 举报
回复
我知道, 你这样做!

在设置的时候这样:
errorMsg = URLEncoder.encode(msg, "utf-8");
在取的时候, 这样:
this.errorMsg = URLDecoder.decode(errorMsg, "utf-8");
futrueing 2010-11-08
  • 打赏
  • 举报
回复
写配置了没有,经常有人写过滤器却忘记写配置了~
daocha 2010-11-08
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 shadow55 的回复:]

有这样扯淡的结果?一般都是Get出问题所以用post的啊
[/Quote]
是啊 不扯淡我也不會過來發了啊 用POST能夠解決亂碼的帖子到處都是 我也知道 而且說用過濾器的也搜出大把呢。。
joyce_wung 2010-11-03
  • 打赏
  • 举报
回复
表单提交的么 ?? 表单提交出现乱码确实比较少的. ...看下是不是request和response设置的编码是否正确吧.
shadow55 2010-11-02
  • 打赏
  • 举报
回复
有这样扯淡的结果?一般都是Get出问题所以用post的啊
futrueing 2010-11-02
  • 打赏
  • 举报
回复
你的过滤器做配置了没有?没配置也是没用的!
notlogin 2010-11-02
  • 打赏
  • 举报
回复
你是用URL传递值的?还是submit表单?
yumyy 2010-11-02
  • 打赏
  • 举报
回复
试下不用过滤器还是这样的结果不?
daocha 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 13 楼 blackstreet 的回复:]

<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
tomcat 的server.xml, 这里设置下,试试
[/Quote]
一早設置過的
daocha 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 16 楼 futrueing 的回复:]

你的过滤器做配置了没有?没配置也是没用的!
[/Quote]
我貌似没那么弱
daocha 2010-11-02
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 notlogin 的回复:]

你是用URL传递值的?还是submit表单?
[/Quote]
表单 method="GET" 然后直接submit
stl0 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 10 楼 daocha 的回复:]
這東西我知道能解決,我現在就是用GET解決的 不過還是想知道為什麼POST不可以,而且我所有編碼都是UTF-8的 我的文件可能還有big5的,並不只是GBK GB2312, struts之前都是用AJAX傳的,那時候碰到亂碼都是因為用了GET 應該POST就不會亂碼了 , 可這次直接submit 沒用AJAX,結果卻恰恰相反了
[/Quote]

GET方式是QUERY_STRING方式来传递, 也就是把参数链接在URL后面,这种方式如果有中文参数,在action中就必须要做转码才可以得到正常值

而POST是把参数按照stdin(标准输入输出)来传递,如果你本来的参数已经是uft-8编码,在action中就没有必要再转一次码了。

不知道我说明白没有
daocha 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 stl0 的回复:]

以前我用js GET提交的时候,也会产生乱码,

最后尝试在action中转码才解决,LZ可以尝试下
Java code
userName = new String(request.getParameter("user_nm").getBytes("ISO-8859-1"), "utf-8");
[/Quote]
這東西我知道能解決,我現在就是用GET解決的 不過還是想知道為什麼POST不可以,而且我所有編碼都是UTF-8的 我的文件可能還有big5的,並不只是GBK GB2312, struts之前都是用AJAX傳的,那時候碰到亂碼都是因為用了GET 應該POST就不會亂碼了 , 可這次直接submit 沒用AJAX,結果卻恰恰相反了
stl0 2010-11-01
  • 打赏
  • 举报
回复
以前我用js GET提交的时候,也会产生乱码,

最后尝试在action中转码才解决,LZ可以尝试下
userName = new String(request.getParameter("user_nm").getBytes("ISO-8859-1"), "utf-8");
nicholasbobo 2010-11-01
  • 打赏
  • 举报
回复
遇到问题,自己设断点测呗,看是哪一步出现的问题,再根据情况作修改,都是这么改出来的,我怎么发现CSDN上很多都是一碰到问题,不管自己能不能解决,都跑来先问了再说
daocha 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 zhuchao_ko 的回复:]

引用 4 楼 daocha 的回复:
引用 1 楼 ghsau 的回复:

没怎么明白你的意思,你第一次提交,显示正常,但是第二次提交就不正常了,还是你一个表单提交了两次,低一次正常,第二次不正常啊!

不是 第一次是上傳文件 然後從服務端把內容顯示出來了,生成一個全新的表單,然後再客戶端看到顯示的內容后做新的提交,然後使用POST就亂碼了

不是同一個表單提交兩次


第一……
[/Quote]

其實就是把文件傳上服務器了,我讀出來裡面的內容 然後把對象放在list裡面,在頁面上輸出來,這不就得到了第二個頁面嗎,把這些內容對應一個個放進相應的表單項中,第二個頁面的作用是用戶確認是否是自己上傳的文件內容,然後用戶確認無誤就提交到第三個頁面去

PS:因為文件編碼各不相同,在上傳後讀取文件的過程中,根據文件編碼的不同大致猜測了源文件是什麼編碼,然後以這種編碼方式讀出來,再保存成UTF-8字符集的文件,為什麼要多保存一次?原因1:我把原始上傳的文件內容進行了刪減,原因2:因為我用到另外一個包,讀文件的時候是按照指定格式讀,所以先把文件格式化內容和字符集後方便讀入。
好了,上傳的文件經過處理保存成UTF-8字符集的新文件了,然後以UTF-8讀取這個新文件,把內容按照我之前的方式輸出到頁面中去,亂碼的情況忽略掉,因為我要保證輸出到頁面,用戶看到的是無亂碼的他們才會去進行下一步提交,所以我的問題發生在第二個頁面中中文能夠正常顯示而無亂碼的前提下,在此頁面的pageEncoding 和 charset 全部都是UTF-8
blackstreet 2010-11-01
  • 打赏
  • 举报
回复
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" />
tomcat 的server.xml, 这里设置下,试试
daocha 2010-11-01
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 stl0 的回复:]

引用 10 楼 daocha 的回复:
這東西我知道能解決,我現在就是用GET解決的 不過還是想知道為什麼POST不可以,而且我所有編碼都是UTF-8的 我的文件可能還有big5的,並不只是GBK GB2312, struts之前都是用AJAX傳的,那時候碰到亂碼都是因為用了GET 應該POST就不會亂碼了 , 可這次直接submit 沒用AJAX,結果卻恰恰相反了


GET方式是QU……
[/Quote]
但問題結果恰恰相反啊 GET反而不用轉碼 而POST卻要轉碼
  • 打赏
  • 举报
回复
不知道了,不应该出这样的问题啊,想不明白!
可能是这样的,你第一次是post请求,然后经过过滤器,把它转成了U8的编码,然后你已经把response设置成U8的编码了,但是你第二次又是post请求,它又从U8转成了U8,可能这个过程中出现了什么错误,而用get请求时,request.setCharacterEncoding("utf-8");,你这条语句是不起作用的,反而好使了!
加载更多回复(5)

81,122

社区成员

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

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