SSH框架,我需要通过URL进行传参,但传中文参数到了action就变成乱码,该如何最好解决

SSH框架,我需要通过URL进行传参,但传中文参数到了action就变成乱码,该如何最好解决,第1张

在楼下回答问题之前 我已经跟楼主说过过滤器的问题了

楼主用的struts20 继承ActionSupport 已经有过效验

是用属性驱动形式获取 也并非request

而且服务器是websphere 而不是tomcat(不能配置conf server配置文件的URLEncode)

因此 我让楼主参考下这个:

>

URLConnection context = urlopenConnection();

InputStream in = contextgetInputStream();

BufferedReader br = new BufferedReader(new InputStreamReader(in, "gbk"));

包装流的时候要加入网站的编码 ,gbk和utf-8都试试

IE缺省对URL后面的参数是不编码发送的,但是Tomat缺省是按ISO8859-1来进行URL编码的,因此才会出错。

方法一:

对URL链接进行二次编码:

<a

onclick="javascript:windowopen(encodeURI(encodeURI('/DispatchActiondoefFormEname=FKRY0001&code_type=中文参数')))">测试</a>

或者单独对参数进行二次编码:

var

code_type

=

"中文参数";

code_type

=

encodeURI(code_type);

code_type

=

encodeURI(code_type);

windowopen("/DispatchActiondoefFormEname=FKRY0001&code_type="+code_type);

Service:

String

code_type

=

requestgetParameter("code_type");

//这句话一定要写,因为如果不写的话编码就是%E5%A6%88%

code_type

=

javanetURLDecoderdecode(code_type,"UTF-8");

有人提出为什么要在客户端对字符串重复编码两次呢?

如果因为项目需要,不能指定容器使用何种编码规则来解码提交的参数,比如:需要接收来自不同页面,不地编码的参数内容时。

(又或者是开发人员被这有点复杂的东西搞得晕头转向,不懂得如何正确的去做好这接收参数的工作)

这个时候,在客户端对参数进行二次编码,可以有效的避开“提交多字节字符”的这个棘手问题。

因为第一次编码,你的参数内容便不带有多字节字符了,成了纯粹的

Ascii

字符串。(这里把编第一次的结果叫成

[STR_ENC1]

好了。[STR_ENC1]

是不带有多字节字符的)

再编一次后,提交,接收时容器自动解一次(容器自动解的这一次,不管是按

GBK

还是

UTF-8

还是

ISO-8859-1

都好,都能够正确的得到

[STR_ENC1])

然后,再在程序中实现一次

decodeURIComponent

(Java中通常使用

javanetURLDecoderdecode(,

"UTF-8"))就可以得到想提交的参数的原值。

简单来说,就是Tomcat服务器会自动帮你做一次URLDecode,再加上你自己在Service代码里面写的URLDecode,一共就是两个Decode了。既然要两次Decode,当然就需要两次Encode了。或许你会问,干脆只Encode一次,然后在java代码里不Decode,呵呵,这个也是不行的,这其实也就是为什么要进行两次Encode的原因吧。

方法二:(经测试不支持IE8)

>

以上就是关于SSH框架,我需要通过URL进行传参,但传中文参数到了action就变成乱码,该如何最好解决全部的内容,包括:SSH框架,我需要通过URL进行传参,但传中文参数到了action就变成乱码,该如何最好解决、C# asp.net页面通过URL参数传值 接收到的值是乱码、java中通过url获取网页内容,中文显示是乱码等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9526258.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-29
下一篇 2023-04-29

发表评论

登录后才能评论

评论列表(0条)

保存