本站首页    管理页面    写新日志    退出


«February 2026»
1234567
891011121314
15161718192021
22232425262728


公告
暂无公告...

我的分类(专题)

日志更新

最新评论

留言板

链接

Blog信息
blog名称:
日志总数:29
评论数量:19
留言数量:0
访问次数:118571
建立时间:2006年5月29日




[java与中文]乱码问题(八)
软件技术

krf301 发表于 2007/4/16 22:16:52

关于JAVA乱码!- -                                        =====乱码情况1:与jsp相关现象:通过param = new String(param.getBytes("iso8859-1"), "gb2312");//对bytes[]内容按指定进行转码>>>解决方法1、加在jsp文件前面<%@ page contentType="text/html;charset=gb2312" language="java"%>//只是指定显示的编码,不转码<META http-equiv=Content-Type content="text/html; charset=gb2312">//只是指定显示的编码,不转码2、也加在jsp文件前面<%@page pageEncoding="GB2312"%>//指定*.jsp的编译时的编码方式。<% request.setCharacterEncoding("gb2312");%>//对bytes[]内容按指定进行转码3、在web.xml里面可以有filter(代码见附录),作用与上一点是一样的,只是不需要每一个jsp都去写那句代码。4、可能在tomcat4.1.24以后的版本中,如果不是在from中post出去的中文字符,都会有问题! =====乱码情况2:与URL相关http://127.0.0.1/encode/a.jsp?param=我爱小宝现象:通过param = new String(param.getBytes("iso8859-1"), "gb2312");好像不可以转换这种乱码是通过httpclient而后成了乱码,在tcp流里面是经过编码的,但转不成功>>>解决方法import java.net.URLEncoder;import java.net.URLDecoder;sourcePath = URLEncoder.encode(sourcePath);this.sourcePath = URLDecoder.decode(sourcePath);//如果过来的是未encode的字符,不会出错,只是不decode ====其它1、使得Java语言拥有16位的Java字符,而却只有8位的输入设备,这样就给Java带来了些不足2、各种编码方式在转换时像GBK<-->Unicode/iso8859-1<-->Unicode之间是涵盖关系,不会丢失信息。3、提问:GB2312被 Unicode涵盖,那为什么不可以都用UTF-8,只在显示的时候转成GB12312???4、WEB容器在其内部默认的字符编码格式都是以ISO-8859-1为默认值的5、浏览器在传递参数时都是默认以UTF-8的方式来传递参数的6、只要入口和出口保证是GB2312,就可以了,其内容可能会在iso8859-1/Unicode之间转换。 a、指定-encoding 2312对*.java文件进行编译  b、输出时指定编码:charset=gb2312 c、接受URL参数时指定编码:request.setCharacterEncoding("gb2312"); d、保证系统default encoding是GBK e、把数据库默认支持的编码格式改为GBK或GB2312的。(如果不设,jdbc缺省以iso8859-1来存信息) f、在*.java文件中采用字符流来处理带中文的字符串 g、指定我们的JSP源文件的编码格式:<%@page pageEncoding="GB2312"%> ====相关链接深入Java中文问题及最优解决方法--上:http://www.pconline.com.cn/pcedu/empolder/gj/java/0404/366404.html深入Java中文问题及最优解决方法-下:http://www.pconline.com.cn/pcedu/empolder/gj/java/0405/368760.htmlJAVA字符编码:http://www.weiw.com/article/list.asp?id=741JSP/Servlet 中的汉字编码问题【转载】+【原创】:http://www.weiw.com/article/list.asp?id=741(中文转码时'?'、乱码的由来) ====附录1、java类代码,编译后的class在CLASSPATH中能指定package aaa;import java.io.IOException;import javax.servlet.Filter;import javax.servlet.FilterChain;import javax.servlet.FilterConfig;import javax.servlet.ServletException;import javax.servlet.ServletRequest;import javax.servlet.ServletResponse;import javax.servlet.UnavailableException; public class EncodingFilter implements Filter {    protected String encoding = null;    protected FilterConfig filterConfig = null;    public void destroy() {        this.encoding = null;        this.filterConfig = null;     }    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)  throws IOException, ServletException {        // Select and set (if needed) the character encoding to be used        String encoding = selectEncoding(request);        if (encoding != null)        {            request.setCharacterEncoding(encoding);        }  // Pass control on to the next filter        chain.doFilter(request, response);    }    public void init(FilterConfig filterConfig) throws ServletException {  this.filterConfig = filterConfig;        this.encoding = filterConfig.getInitParameter("encoding");    }    protected String selectEncoding(ServletRequest request) {        return (this.encoding);    }}同时,在web.xml中加入如下配置:[code]    <filter>        <filter-name>Set Character Encoding</filter-name>        <filter-class>aaa.EncodingFilter</filter-class>        <init-param>            <param-name>encoding</param-name>            <param-value>GBK</param-value>        </init-param>    </filter>     <filter-mapping>        <filter-name>Set Character Encoding</filter-name>        <url-pattern>/*</url-pattern>    </filter-mapping>[/code]


阅读全文(1076) | 回复(0) | 编辑 | 精华
 



发表评论:
昵称:
密码:
主页:
标题:
验证码:  (不区分大小写,请仔细填写,输错需重写评论内容!)



站点首页 | 联系我们 | 博客注册 | 博客登陆

Sponsored By W3CHINA
W3CHINA Blog 0.8 Processed in 0.453 second(s), page refreshed 144813262 times.
《全国人大常委会关于维护互联网安全的决定》  《计算机信息网络国际联网安全保护管理办法》
苏ICP备05006046号