jsp读取数据库中文乱码问题

本文总结了中文乱码问题的解决方案,包括JSP与页面参数、Java与数据库、Java与文件/流之间的乱码处理。在JSP中设置请求和响应编码,数据库连接URL指定字符编码,使用InputStreamReader/OutputStreamWriter处理文件读写时的编码问题,以避免乱码。
摘要由CSDN通过智能技术生成

这个问题是从项目中设计数据库和操作数据库的人不同而造成的。所用的数据库

是sybase,设计时把数据类型设计为nvarchar了,如果是中文,读取出来就会得

到乱码。我试了好多方法还是不行,最后无奈,只好将数据类型改为varchar了。

所以在此总结一下中文乱码问题。

一、JSP与页面参数之间的乱码
       JSP获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码

类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问题的

基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:

request.setCharacterEncoding("GBK")或request.setCharacterEncoding

("gb2312")。
如果在JSP将变量输出到页面时出现了乱码,可以通过设置

response.setContentType("text/html;charset=GBK")或

response.setContentType("text/html;charset=gb2312")解决。

二、Java与数据库之间的乱码
       大部分数据库都支持以unicode编码方式,所以解决Java与数据库之间的

乱码问题比较明智的方式是直接使用unicode编码与数据库交互。很多数据库驱动

自动支持unicode,如Microsoft的SQLServer驱动。其他大部分数据库驱动,可以

在驱动的url参数中指定,如如mm的mysql驱动:

jdbc:mysql://localhost/WEBCLDB?useUnicode=true&characterEncoding=GBK。

三、Java与文件/流之间的乱码
       Java读写文件最常用的类是FileInputStream/FileOutputStream和

FileReader/FileWriter。其中FileInputStream和FileOutputStream是基于字节

流的,常用于读写二进制文件。读写字符文件建议使用基于字符的FileReader和

FileWriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系

统的编码方式,如果文件内容与系统编码方式不一致,可能会出现码。     在这

种情况下,建议使用FileReader和FileWriter的父类:

InputStreamReader/OutputStreamWriter,它们也是基于字符的,但在构造函数

中可以指定编码类型:InputStreamReader(InputStream in, Charset cs) 和

OutputStreamWriter(OutputStream out, Charset cs)。


 字符,字节和编码之间的关系

1. 编码问题的由来,相关概念的理解
1.1 字符与编码的发展
从计算机对多国语言的支持角度看,大致可以分为三个阶段:

  系统内码 说明 系统
阶段一 ASCII 计算机刚开始只支持英语,其它语言不能够在计算机上存储和显示

。 英文 DOS
阶段二 ANSI编码
(本地化) 为使计算机支持更多语言,通常使用 0x80~0xFF 范围的 2 个字节来

表示 1 个字符。比如:汉字 '中' 在中文操作系统中,使用 [0xD6,0xD0] 这两

个字节存储。

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的

编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为

ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统

下,ANSI 编码代表 JIS 编码。

不同 ANSI 编码之间互不兼容,当信息在国际间交流时&

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值