我可以: 邀请好友来看>>
ZOL星空(中国) > 技术星空(中国) > jsp开发中中文乱码问题解决方法介绍(java、struts)
返回列表
签到
手机签到经验翻倍!
快来扫一扫!

jsp开发中中文乱码问题解决方法介绍(java、struts)

770浏览 / 31回复

kofstart

kofstart

1
精华
32
帖子

等  级:Lv.4
经  验:2952
  • Z金豆: 0

    千万礼品等你来兑哦~快点击这里兑换吧~

  • 城  市:北京
  • 注  册:2009-01-15
  • 登  录:2014-01-25
发表于 2011-07-02 06:41:29
电梯直达 确定
楼主
口袋猫 把此帖设为精华,作者+50经验:

    由于要显示中文,jsp页面编码方式一般设定为utf-8gb2312gbkutf-8可以表示世界上几乎所有的语言,gbkgb2312是中文字符集标准,其中gb2312任何字符都可以在gbk中找到对应字符,即可以认为gbk字符集包含gb2312字符集。

为了解决中文乱码问题,必须理解一下几个知识点:

1.       jsp中,前台jsp文件传递到后台的参数表示为Unicode代码,而当要保存到文件或其它介质中去时,用的是UTF。这个转化过程是由writeUTFreadUTF来完成的。我们可以理解为,在后台获取前台jsp参数时,获得的是其参数经过一系列转化而获得的unicode编码。

2.       当有某种字符编码转化为另外一种字符编码时,如果后则没有对应编码,则其值会被设定为63,即字符“?”,如果有,则设定为该字符。所以如果出现乱码,并不是所有的字符都是“?”。

3.       JVM中的默认设置file.encoding,一般情况下,这个值是ISO8859-1,可以通过Charset.defaultCharset()获得该值,我电脑上的是GBK

4.       如果你的前台jsp文件编码方式设定为gb2312,而在处理过程中,绝大部分中文都能正常显示,只有少数几个显示为“?”,则一般可以把gb2312编码改为gbk就可以解决问题。

5.       ISO-8859-1编码转化为Unicode编码时,是在每个字节前增加一个字节,其值为0x00,d6 d0(ISO-8859-1)变化为00 d6 00 d0(Unicode).Unicode编码转化为ISO-8859-1编码转化成功时,则正好相反(每两个字节分为一组,去掉第一个字节,第一个字节其值应该为0x00)。

6.       任何编码的字节流都可以转化为ISO-8859-1的字节流而不丢失信息,因为ISO-8859-1利用了一个字节的所以位。

对上面内容有大致了解后,我们就可以自己摸索须寻找解决中文乱码问题的解决方案,以下是我最近开发项目时,摸索解决处理中文的具体过程。

为了解决该问题,我写了一个简单的测试项目(struts1),前台jsp文件编码设定为gbk,其中有一个表单,表单中有一个名称为userName的文本框,我把其值定为“中文”(经查,gbk编码为d6 d0 ce c4),提交表单后,转到后台文件处理(java文件),在后台处理文件中,首先我通过requestgetParameter()方法获得userName,结果其值为” ÖDÎÄ”(查表可知其编码为:” u00d6 u00d0 u00ce u00c4”),如何获得字节流”d6 d0 ce c4”呢?通过上面知识点5,我通过str.getBytes(“ISO-8859-1”)获得了获得的字符串的ISO-8859-1字符流buf,其值为” d6 d0 ce c4”,正是我所需要的值,接着我就重新构造字符串,通过new String(buf)获得正确显示的中文,如果默认字符集不是gbk,则应该用new String(buf,”gbk”)获得正确的中文字符串。对此问题,我的理解是,gbk编码的中文字符“中文”的编码为“d6 d0 ce c4”,转化为ISO-8859-1字符流为“d6 d0 ce c4”,然后在转化为Unicode字符流“00 d6 00 d0 00 ce 00 c4”,在内存中以对应的字符串” ÖDÎÄ”保存;然后在后台如何处理获得正确显示的中文字符串上面已经讲解。

以上实例是基于我的相关环境及配置研究获得的解决方案,不同环境可能不一定完全相同,但是如果理解了上述发现问题,解决问题的步骤,我相信一般乱码问题都可以得到解决。本文不正确或者不完整的地方还请各位指教,希望和大家一起共同学习,共同进步。

471594693qq

471594693qq


精华

帖子

等  级:Lv.4
经  验:2250
发表于 2012-02-29 18:15:46 37楼
好贴! 顶一个。

zol_xiao

zol_xiao


精华

帖子

等  级:Lv.6
经  验:7394
发表于 2012-02-29 11:00:24 36楼
楼主很认真啊

imyanghao

imyanghao


精华

帖子

等  级:Lv.6
经  验:7358
发表于 2012-02-28 09:41:24 35楼
不错啊

info800cv499

info800cv499


精华

帖子

等  级:Lv.1
经  验:0
发表于 2011-08-18 16:09:06 34楼

您的内容正在火速审核中,请稍等

kokoo1115

kokoo1115


精华

帖子

等  级:Lv.1
经  验:73
发表于 2011-08-08 14:57:26 33楼

您的内容正在火速审核中,请稍等

andezol

andezol


精华

帖子

等  级:Lv.5
经  验:5837
发表于 2011-08-02 18:05:52 32楼
不懂的路过




jnlehaha

jnlehaha


精华

帖子

等  级:Lv.1
经  验:28
发表于 2011-08-02 15:26:04 31楼

您的内容正在火速审核中,请稍等

jnlehaha

jnlehaha


精华

帖子

等  级:Lv.1
经  验:28
发表于 2011-08-02 15:23:27 30楼
对,确实是如此,有时候改为gb2312就OK了

zhang123455

zhang123455


精华

帖子

等  级:Lv.3
经  验:1374
发表于 2011-07-30 10:34:05 29楼
谢谢分享。

yangqianyi

yangqianyi


精华

帖子

等  级:Lv.6
经  验:9376
发表于 2011-07-30 10:29:29 28楼

您的内容正在火速审核中,请稍等

yangqianyi

yangqianyi


精华

帖子

等  级:Lv.6
经  验:9376
发表于 2011-07-30 10:29:28 27楼
飘过!

jzsgcsbnm

jzsgcsbnm


精华

帖子

等  级:Lv.1
经  验:29
发表于 2011-07-23 04:04:21 26楼
很好

jzsgcsbnm

jzsgcsbnm


精华

帖子

等  级:Lv.1
经  验:29
发表于 2011-07-23 04:04:04 25楼
不错

dxy25338

dxy25338


精华

帖子

等  级:Lv.1
经  验:8
发表于 2011-07-22 23:37:01 24楼

您的内容正在火速审核中,请稍等

whutzhou89

whutzhou89


精华

帖子

等  级:Lv.1
经  验:40
发表于 2011-07-17 20:16:59 23楼
对 第22楼 zheng565407548 说:
=========================

嗯 我知道了 谢谢楼主!!

zolshangyong

zolshangyong


精华

帖子

等  级:Lv.5
经  验:5299
发表于 2011-07-17 20:02:51 22楼
对 第20楼 whutzhou89 说:
=========================

该解决处理方法可以解决你的问题,我已经调试过了,,,

zolshangyong

zolshangyong


精华

帖子

等  级:Lv.5
经  验:5299
发表于 2011-07-15 21:38:46 21楼
对 第20楼 whutzhou89 说:
=========================

这里介绍的差不多就是url中传递中文的问题啊。由于我现在开发的框架是struts,它在实现跳转的时候其实就是等同于url跳转,具体后台如何处理参考《解决jsp中文显示及处理问题--四种解决方案实例》一帖

whutzhou89

whutzhou89


精华

帖子

等  级:Lv.1
经  验:40
发表于 2011-07-15 21:19:44 20楼
楼主对这个做了蛮深的研究的。 膜拜一下~ 哈哈 还有URL地址中的中文问题也是个棘手问题,我上次 使用 url地址传中文数据总是出现乱码问题 就是 http://.......?text=中文字符 然后用request的getparameter() 总是出错。 后来时间问题 也没去研究了。 求解楼主给个解决方案.... 嘎嘎

zolshangyong

zolshangyong


精华

帖子

等  级:Lv.5
经  验:5299
发表于 2011-07-14 23:18:00 19楼
对 第13楼 gota_01 说:
=========================

学习java到现在,还没有接触到utf-8+bom的概念。

tigerxiaohu1...

tigerxiaohu123


精华

帖子

等  级:Lv.1
经  验:20
发表于 2011-07-14 22:57:46 18楼
顶楼主
点击查看更多精彩回复>>
去第 确定
支持键盘翻页 ( 左右 ) 
高级模式
星空(中国)精选大家都在看24小时热帖7天热帖大家都在问最新回答

针对ZOL星空(中国)您有任何使用问题和建议 您可以 联系星空(中国)管理员查看帮助  或  给我提意见

快捷回复 APP下载 返回列表