| « | February 2026 | » | | 日 | 一 | 二 | 三 | 四 | 五 | 六 | | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | |
| 公告 |
| 暂无公告... |
| 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] |
|
|