Web中文乱码——3、Webx编解码基础

来源:互联网 发布:白银td知乎 编辑:程序博客网 时间:2024/05/18 00:37
        Webx是阿里巴巴自主开发的web框架,当前版本为webx3,下文中不区分webx和webx3。

一、Request&Response        

        为了简化各类编码设置,Webx试图提供统一的配置方式
<services:request-contextsxmlns="http://www.alibaba.com/schema/services/request-contexts">……<!-- 编码设置 --><set-locale defaultLocale="zh_CN" defaultCharset="GBK" /><!-- 参数解析功能的增强,同时也用于配合编码设置来实现对get请求参数的正确解码 --><parser/>……</services:request-contexts>
        如上所示,webx采用<set-locale/>来设置字符集,接着采用<parser/>将来get、post参数按照指定的字符集来进行解码。此外,webx还会在response中设置context-type,将字符集设置为<set-locale/>中配置的值。一般情况下,这已经能解决大部分乱码问题了,但偶尔还需要针对特定的请求指定特定的编码。比如:chrome发送的ajax请求参数都是UTF-8,当<set-locale/>设置为GBK时就会出现乱码。此时可以按照如下方式进行解决,需要注意的是,即时是post请求,_input_charset也需要附带在URL中,而不是作为普通的form字段。
http://localhost:8081/myapp/myform?_input_charset=UTF-8
        类似的,某些response可能不是以默认字符集进行输出的,此时就需要如下指定。
http://localhost:8081/myapp/myform?_output_charset=UTF-8
        此外,webx还提供了如下方式来确保在当前会话中一直只用特殊的字符集
http://localhost:8081/myapp?_lang=zh_CN:UTF-8

二、VM

        和SpringMVC类似,webx中可以指定VM的相关编码。
<services:templatexmlns="http://www.alibaba.com/schema/services/template/engines"searchExtensions="true"><velocity-engine templateEncoding="gbk"strictReference="false" path="/classpath/templates/${component}"><global-macros><name>macros.vm</name>                 </global-macros> <plugins><!-- 安全检查 --><vm-plugins:fasttext-support /><!-- 渲染支持,controlTool等pull工具需要用到 --><vm-plugins:renderable-support /></plugins></velocity-engine></services:template>
        templateEncoding指定了Java以何种编码来读入VM。和SpringMVC不同的是,Webx并没有在这里指定Java向浏览器输出VM采用的编码,输出时采用JVM默认的编码,详见《Java中文乱码——1、Java编解码基础》

三、配置建议

        当然还是那句话,将能够配置的地方全都配置成一样的字符集,比如:UTF-8。但即使如此,乱码还是会发生,那就详见《Web中文乱码——4、Webx+jetty乱码》


参考:
http://openwebx.org/docs/requestcontexts.html

0 0
原创粉丝点击