使用的环境:tomcat5.5,ext2.0,编码全是utf-8,包括eclipse中js,jsp文件的编码
在表单输入中含有中文和URI中含中文,都会出现乱码..但这两种情况的是不一样的..所以要分清楚..
1.URI中含中文
经过多次实验,发现用URI包含中文时,必须使用encodeURI或encodeURIComponent,否则无论后台怎么处理都会是乱码.
其中encodeURI可以对整个URI进行编码的转换;而encodeURIComponent只能对单个,否则URI中的/也会被转换.
当使用了encodeURI时,如果在tomcat的Connector中设置URIEncoding="UTF-8",在后台可以直接用request.getParameter()取值,不需要进行转换.
如果没有在tomcat中设置URIEncoding,则需要使用new String(req.getParameter("a").getBytes("ISO-8859-1"), "utf-8")进行转码.因为tomcat默认的编码是ISO-8859-1.
2.通过表单方式(使用的是Ext.form.FormPanel)
tomcat中是否设置URIEncoding,都没有用..需要在后台使用new String(req.getParameter("a").getBytes("ISO-8859-1"), "utf-8")进行转码.
可能需要在js添加Ext.lib.Ajax.defaultPostHeader = Ext.lib.Ajax.defaultPostHeader + ";utf-8"。
因为一开始遇到一个奇怪的情况,在表单中输入中文,提交时ext js中就报错..后来改了很多地方就好了。。等我把改的都还原回去以后,竟然没有问题了。。也没有加defaultPostHeader。怀疑是js文件的编码格式的问题。
需要注意的是action使用response返回json给ext时,也要使用"中文".getBytes("utf-8");否则会报js错误。
在表单输入中含有中文和URI中含中文,都会出现乱码..但这两种情况的是不一样的..所以要分清楚..
1.URI中含中文
经过多次实验,发现用URI包含中文时,必须使用encodeURI或encodeURIComponent,否则无论后台怎么处理都会是乱码.
其中encodeURI可以对整个URI进行编码的转换;而encodeURIComponent只能对单个,否则URI中的/也会被转换.
当使用了encodeURI时,如果在tomcat的Connector中设置URIEncoding="UTF-8",在后台可以直接用request.getParameter()取值,不需要进行转换.
如果没有在tomcat中设置URIEncoding,则需要使用new String(req.getParameter("a").getBytes("ISO-8859-1"), "utf-8")进行转码.因为tomcat默认的编码是ISO-8859-1.
2.通过表单方式(使用的是Ext.form.FormPanel)
tomcat中是否设置URIEncoding,都没有用..需要在后台使用new String(req.getParameter("a").getBytes("ISO-8859-1"), "utf-8")进行转码.
可能需要在js添加Ext.lib.Ajax.defaultPostHeader = Ext.lib.Ajax.defaultPostHeader + ";utf-8"。
因为一开始遇到一个奇怪的情况,在表单中输入中文,提交时ext js中就报错..后来改了很多地方就好了。。等我把改的都还原回去以后,竟然没有问题了。。也没有加defaultPostHeader。怀疑是js文件的编码格式的问题。
需要注意的是action使用response返回json给ext时,也要使用"中文".getBytes("utf-8");否则会报js错误。
本文详细介绍了在使用Tomcat 5.5与Ext 2.0环境下如何解决URI及表单提交时出现的中文乱码问题。对于URI中的中文字符,推荐使用encodeURI或encodeURIComponent进行编码,并介绍了不同情况下如何配置Tomcat的URIEncoding属性来直接获取参数或在后台进行编码转换的方法。此外,还讨论了表单提交中文时的解决方案。
1519

被折叠的 条评论
为什么被折叠?



