- 热门文章:
- · Tomcat下配置MySQL数据库连接池
- · WebWork2源码分析续三
- · WebWork2源码分析续二
- · WebWork2源码分析续一
- · WebWork2源码分析
- · 刚运行了 Azureus ,给我的感觉是这界面真不象是Java 写的,发誓看完这套代码!
- · [JAVA]变量作用域的问题
- · 我眼中的Java经典书籍
- · 编写自己的登录与访问控制模块
- · [Eclipse笔记]作为Java IDE的Eclipse有多流行?看看今年TheServerSide的Java研讨会上做的一个调查。
- · J2SE 5.0的新特性---Autoboxing
- · 如何在windows NT 下安装jboss为服务?(How to install jboss as Windows NT OS Service?)
上一篇:Imagemagick备忘 >>
我的乱码之路——JSP与MySQL交互的中文乱码解决方案及总结
首先实现了一个StringConvert bean(GBtoISO()和ISOtoGB()两个方法),解决了与MySQL数据库交互的时候的部分中文乱码问题:在JSP程序中读取MySQL的中文内容,用这两个方法可以解决乱码问题。
但是从JSP写入到MySQL的中文内容都成了乱码,并且再读出来的时候也显示为“??”,在这里应该出现了编码转换过程中的字符信息丢失。郁闷的是,我在命令行窗口中登陆到MySQL后,执行如“INSERT INTO customerVALUES(@#字符@#,...)”这样的语句时,写入到数据表中的中文内容又是显示正常的!!!数据库使用的字符集是utf8。
碰壁多次,终于发现一条解决问题的路径:查看MySQL手册的时候,看到一条这样的语句:Toallow multiple character sets to be sent from the client, the "UTF-8"encoding should be used, either by configuring "utf8" as the defaultserver character set, or by configuring the JDBC driver to use "UTF-8"through the characterEncoding property.
此外,在查阅《MySQL权威指南》时,发现在查询语句中可以使用这样的语法将字符串转换到一个给定的字符集:_charset str。
其中charset必须是服务器支持的某个字符集。在本例中,shopdb数据库使用的默认字符集是utf8,于是开始测试:
先输入INSERT INTO publish Values(@#8@#,_gb2312 @#高等教育出版社@#) 写入后中文变成“??”
再试INSERT INTO publish Values(@#8@#,_gbk @#高等教育出版社@#) 结果同上
INSERT INTO publish Values(@#8@#,_utf8 @#高等教育出版社@#) 这下更干脆,什么都没有!!
快疯了!!没办法,用show character set;命令查看MySQL支持的字符集,心想我都试一遍总有一个能成功吧。浏览了一下,发现没有几个熟悉的字符集,就只剩下一个latin1(ISO-8859-1)比较常见了,不会是它吧,一试之下果然便是。
INSERT INTO publish Values(@#8@#,_latin1 @#高等教育出版社@#) 输入中文能够正确显示。
这下总算找到方法了,把Tomcat下配置的数据库连接池的url改为"...characterEncoding=UTF-8",然后把写入数据库的中文内容用
String s2 = new String(s1.getBytes("gb2312"),"ISO-8859-1")进行转码,其中s1为中文字符串.然后再写入到数据库一切显示正常。
为解决这个问题查看了n多资料,现作一个总结:由于字符集和字符编码方式的不同,在OS以及程序之间传递数据(尤其是multiple character sets中的数据)时便会产生乱码以及字符信息的丢失.解决这个问题的关键便是了解数据输出端和接收端使用的字符集和字符编码方式,如果这两种编码方式不同,便需要在数据出口或入口处进行 转码。一般的说,在编写代码,编译,以及运行期间都会字符数据的传递,因此需要特别小心。
在编写代码的时候,你可能会使用某种开发工具,例如我正在使用的Eclipse.或许在写的时候一切正常,可是一旦保存后再次打开文档,所有的中文字符都变成了乱码。这是因为在编写的时候,这些字符数据都在内存的某个stream中,ok,这没问题,可是保存的时候这个stream中的数据会被写入到硬盘,使用的就是你的开发工具默认的编码方式,如果很不幸你的开发工具默认编码方式是ISO-8859-1,中文字符信息就不能正确地存储。Eclipse中可以这样查看并修改默认字符编码方式:Project->Properties->info,这里有"default encoding for text file"。如果设置为GBK,那么编写代码并保存这关就过了。
对于JSP程序而言,编写完代码后就交给Container,首先它们会被转成.java文件,然后编译成.class才能提交给服务器执行.这个过程也存在字符编码问题.java编译器(javac)使用操作系统的语言环境作为默认的字符编码方式,JRE(Java Runtime Environment)也是这样。只有当编译和运行环境的字符编码方式与存储源文件的编码方式相同时,中文字符才能正确地显示。否则就需要在运行时进行转码,使它们使用兼容的编码。这里的设置可以分为几个层次:操作系统层支持的语言,这是最重要的,因为它会影响JVM的默认字符编码方式,同时对字符的显示,如字体等有直接影响;J2EE服务器层,大多数服务器都可以对字符编码进行自定义的配置,例如Tomcat就可以通过web.xml中设置javaEncoding参数设置字符编码,默认是UTF-8.
IE也可以设置成总是使用UTF-8编码来发送请求.应用程序层,每个配置在服务器下的程序都可以设置自己的编码方式,这个我目前还没有用到,以后再学习。
运行时的转码,运行时期,应用程序很可能需要与外部系统进行交互,例如对数据库进行读写,对外部文件进行读写.在这些情况下,应用程序免不了要和外部系统进行数据交换。那么对于中文字符, 数据出入口的编码方式就显得特别重要了。一般外部系统都有自己的字符编码方式,我的例子中配置的MySQL就是使用的UTF-8编码。JSP页面通过设定"charset=gb2312",
使用gb2312编码,在它与数据库交互的时候就需要进行显式的转码才能正确处理中文字符。
下一篇:Tomcat下配置MySQL数据库连接池 >>
相关文章:
- · What is SOA?----------对SOA的思考,以及由此想到的人类社会的发展
- · 介绍一些 Java NIO 的学习文章,以方便各位的学习!
- · 《java深度历险》读书笔记(一)
- · Velocity A template engine OR A Rule engine OR Both
- · 2005 JDJ Readers Choice Awards - Best Java Book Nominees:
- · javascript事件查询综合
- · 让我感觉很爽的CachedRowSet
- · java日记:学习java一年体会3
- · [原创] Eclipse 3.1M5a中创建RCP程序
- · Oracle & JSP 开发的小型信息管理系统 (五) 源代码4
- · Oracle & JSP 开发的小型信息管理系统 (四) 源代码3
- · Oracle & JSP 开发的小型信息管理系统 (三) 源代码2
- · Oracle & JSP 开发的小型信息管理系统 (二) 源代码1
- · Oracle & JSP 开发的小型信息管理系统 (一) 说明文档
- · 在Unix和Linux下安装JDK及环境设置
- · 读取foxpro格式的dbf文件
- · 什么是Extreme Programming(极限编程,简称XP)
- · 在struts中使用国际化(i18n)
- · 复杂类型javabean(数组成员)在jsp中的运用:在jsp页面间传递数组
- · 启动WebLogic后,不能进入控制台和应用的问题
- · Known Bugs in Tomcat 5 while using RMI
- · Annotations:hype or not?
- · Jsdk5.0中新增枚举enum类型使用例解
- · Java开源实践(1)--环境配置
- · 《Java 手机/PDA 程序设计入门》读书笔记8--LCDAUI低级API之 线程 时间控制
- · hibernate in 查询
- · Think in java Stream 经典
- · Eclipse启动时报错
- · 面向对象WEB开发框架:ECHO2 卷土重来
- · Spring+Struts+Hibernate入门例子Wiring Step By Step
- · scjp认证 我的拾零
- · 用OTA下载本机J2me程序至手机
- · ibm developer的一些对我有用的网址
- · eclipse 下用cdt插件开发c c++程序
- · java日记:学习java一年体会1
- · 今日笔记系列之Castor
- · [个人原创]JAVA 开发工具Jcreator使用技巧总结
- · jbuilder 2005 update 4
