Java编码总结

Java 编码问题总结
一、实践原则
    1、页面文件的保存格式做到与声明一致
        如声明<%@ page language="java" pageEncoding="utf-8"%>,则该文件保存为utf-8格式
    2、无论是Get、Post还是JavaScript直接调用,浏览器以页面文件指定的编码格式提交请求
    3、JavaScript的方法如encodeURI、encodeURIComponent等使用utf-8格式编码数据
二、Http协议和Servlet规范
    A、Http协议
        1、Get    根据Http协议,Get方法中的uri、queryString等均为iso-8859-1编码格式
        2、Post    Post方法中可以使用其他的编码格式,如utf-8,默认为iso-8859-1
    B、Servlet规范
        1、ServletRequest
            void setCharacterEncoding(String env);    该方法可以用于指定request body中数据的编码格式,Container根据此格式解析
            注:该方法必须在取参数及获取输入流之前调用,否则无效,即getParamater(String key)和getReader()之前调用
        2、ServletResponse
            void setCharacterEncoding(String charset);该方法用于设置Container响应输出流的编码格式,但不指定响应内容格式,Servlet2.4+支持
            void setContentType(String type);该方法用于指定响应内容格式,同时可以指定响应输出流格式,如下两种情况基本等效,不同在于使用A时,浏览器将使用默认编码,B将告诉浏览器使用指定编码:
                A、setCharacterEncoding("utf-8");    setContentType("text/html");
                B、setContentType("text/html; charset=UTF-8");
            以上方法可以重复调用覆盖以前设置,但应该在输出之前,如调用getWriter();之前
三、服务器状况
    当前的不少服务器对Servlet规范中 void setCharacterEncoding(String env);支持的不够好,毕竟国外厂商本语是English,可能没有实现该方法,即使调用了改方法,仍然使用默认的iso-8859-1解析
    个人测试了如下服务器支持:
        A、Apache-Tomcat-5.5.12
        B、Apache-Tomcat-6.0.18
四、方案总结
    A、统一编码方式,如使用utf-8,在服务器端用指定的编码格式解析数据(如果容器不支持,则手工转码),然后再指定输出格式
    B、将要提交的英文以外格式的参数先进行转码再提交,如encodeURIComponent,服务器端通过URIDecoder解码(utf-8格式),处理完成后,或者指定输出流及内容格式为utf-8,或者转为gb2312,以iso-8859-1送回

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值