中文乱码问题
来源:互联网 发布:sql having语法 编辑:程序博客网 时间:2024/04/27 14:03
<!-- /* Font Definitions */ @font-face{font-family:Wingdings;panose-1:5 0 0 0 0 0 0 0 0 0;mso-font-charset:2;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:0 268435456 0 0 -2147483648 0;}@font-face{font-family:宋体;panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-alt:SimSun;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;}@font-face{font-family:"/@宋体";panose-1:2 1 6 0 3 1 1 1 1 1;mso-font-charset:134;mso-generic-font-family:auto;mso-font-pitch:variable;mso-font-signature:3 135135232 16 0 262145 0;} /* Style Definitions */ p.MsoNormal, li.MsoNormal, div.MsoNormal{mso-style-parent:"";margin:0cm;margin-bottom:.0001pt;text-align:justify;text-justify:inter-ideograph;mso-pagination:none;font-size:10.5pt;mso-bidi-font-size:12.0pt;font-family:"Times New Roman";mso-fareast-font-family:宋体;mso-font-kerning:1.0pt;} /* Page Definitions */ @page{mso-page-border-surround-header:no;mso-page-border-surround-footer:no;}@page Section1{size:595.3pt 841.9pt;margin:72.0pt 90.0pt 72.0pt 90.0pt;mso-header-margin:42.55pt;mso-footer-margin:49.6pt;mso-paper-source:0;layout-grid:15.6pt;}div.Section1{page:Section1;} /* List Definitions */ @list l0{mso-list-id:781732212;mso-list-type:hybrid;mso-list-template-ids:1537641596 1319779030 67698713 67698715 67698703 67698713 67698715 67698703 67698713 67698715;}@list l0:level1{mso-level-text:%1、;mso-level-tab-stop:18.0pt;mso-level-number-position:left;margin-left:18.0pt;text-indent:-18.0pt;}@list l0:level2{mso-level-number-format:alpha-lower;mso-level-text:"%2/)";mso-level-tab-stop:42.0pt;mso-level-number-position:left;margin-left:42.0pt;text-indent:-21.0pt;}ol{margin-bottom:0cm;}ul{margin-bottom:0cm;}-->
中文乱码问题(STEPONE BY ONE)
中文乱码应该是Web开发中常遇到的问题,也是很头疼的问题。每一次到了编程的时候,我总是重新Google搜索解决方法。为了避免不必要的时间浪费,我大致总结了Web编程下的中文乱码解决方法,方便以后自己查阅。方法很多,这里主要就设计一个设计方案,想了解更多的请GOOGLE,下面以UTF-8为例:
1、 中文问题的由来。要想解决问题,首先应该认识问题。
Java的内核和class文件是基于unicode的,这使Java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,Java和JSP文件本身编译时产生的乱码问题和Java程序于其他媒介交互产生的乱码问题。
首先Java(包括JSP)源文件中很可能包含有中文,而Java和JSP源文件的保存方式是基于字节流的,如果Java和JSP编译成class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在Java文件中尽量不要写中文(注释部分不参与编译,写中文没关系),如果必须写的话,尽量手动带参数-ecoding GBK或-ecoding gb2312编译;对于JSP,在文件头加上<%@page contentType="text/html;charset=GBK"%>或<%@ pagecontentType="text/html;charset=gb2312"%>基本上就能解决这类乱码问题。
Java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,Java程序与这些媒介交互时就会发生字符(char)与字节 (byte)之间的转换,例如从页面提交表单中提交的数据在Java程序里显示乱码等情况,与Tomcat服务器交换很容易产生乱码,因为默认的处理是以 ISO-8859-1字符集,如果我们处理的是中文的字符就会产生问题。
2、 基本设置。这些是最基本的设置,如果脱离了这些设置,那你再往下设计也是白费力气的。
THML编码。页面<head></head>标签中添加<metahttp-equiv="Content-Type" content="text/html;charset=utf-8"/>
JSP编码。在文件头中添加<%@ page language="java"pageEncoding="utf-8"%>
3、 过滤器设计。通过过滤器来过滤所有的消息请求和响应。
配置web.xml
<web-app ……>
<filter>
<filter-name>EncodingFilter</filter-name>
<filter-class>com.apj.web.filter.EncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>utf-8</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>EncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
设计过滤器:
import javax.servlet.Filter;
public class EncodingFilter extends HttpServlet implements Filter {
private String encoding;
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {
servletRequest.setCharacterEncoding(encoding);
chain.doFilter(servletRequest, servletResponse);
}
public void init(FilterConfig config) throws ServletException {
this.encoding = config.getInitParameter("encoding");
}
}
4、 数据库编码。以mysql数据库为例:
一般数据连接语句URL:
jdbc:mysql://localhost:3306/database name?useUnicode=true&characterEncoding=utf8
Hibernate中设计:
hibernate配置文件(hibernate.cfg.xml)中,加上属性
<property name="connection.useUnicode">true</property>
<property name="connection.characterEncoding">UTF-8</property>
当然在hibernate中你也可以用第一种方法,直接改变url连接方式,而不添加属性。不过在这个环节中我出现过一个问题,url要设计为jdbc:mysql://localhost:3306/databasename? characterEncoding=utf8才可以。userUnicode属性不要。
最好你设计数据库时定好编码方式为utf8,这样保持一致,如CREATEDATABASE MTR_DB DEFAULT CHARACTER SET utf8。如果已经设计好,就改变其编码方式。
以上我们通过设计完成了*jspßà*.java 和*.java ßà Database环节的编码转换,如果还有问题,请到下面环节。
5、 测试和检查乱码根源。开始看这里前,你确定你的测试是在重启应用服务器后开展的??
这个环节我不再说怎么转化了,如果还出现问题,你在这里也找不到答案了,请你GOOGLE其它帮助吧。我这里只要是教你发现问题出现在哪里。
第一节中也说过了,乱码出现只要是因为两个环节的编码转换问题,只要我们确保了,对症下药,相信成功也不远了。
a) *.jspà *.java :在servlet或Struts的action中读取jsp页面传递过来的值为中文的参数(属性)。然后直接输出。如果显示正常,拿就证明了问题出现在*.java ßà 数据库环节。
b) *.javaà*.jsp :通过servlet中返回含中文的字符到*.jsp中显示,如果乱码,就是*.jsp中编码的不支持。这时不妨设置一下*.jsp页面的编码和servlet中加上:request.setCharacterEncoding("utf-8"); response.setCharacterEncoding("utf-8")。
c) *.java ßàdatabase :如果上边都没问题在来做servlet到数据库环节的测试。(略)
- 中文乱码问题
- Webshpere 中文乱码问题。
- JPGraph中文乱码问题
- 中文乱码问题
- 中文乱码问题
- 解决中文乱码问题
- AJAX中文乱码问题
- JSF中文乱码问题
- JBuilder2005中文乱码问题
- jsp中文乱码问题
- AO中文乱码问题
- AO中文乱码问题
- 中文乱码问题总结
- Ajax中文乱码问题
- 解决中文乱码问题
- 中文乱码问题
- java中文乱码问题
- 解决中文乱码问题
- 第一次制作ATL控件心得!!!FontColor控件!!
- apache + tomcat 一个网站多域名
- 判断软件是否注册(转)
- Linux查找文件的相关命令
- 《程序员》杂志:浅谈51.com产品设计
- 中文乱码问题
- 整合编译mysql和tcmalloc失败的原因
- 大型网站架构演变和知识体系
- 网络上必须掌握的八个DOS命令
- 磁盘排序影响Oracle数据库性能
- Words
- 创建目录和新建文本文件
- 全局探色器-函数
- w2K3+MSCS+SQL2005安装过程