转的[color=blue][/color][size=x-small][/size][align=left][/align]
一、java中文问题的由来
java的内核和class文件是基于unicode的,这使java程序具有良好的跨平台性,但也带来了一些中文乱码问题的麻烦。原因主要有两方面,java和jsp文件本身编译时产生的乱码问题和java程序于其他媒介交互产生的乱码问题。
首先java(包括jsp)源文件中很可能包含有中文,而java和jsp源文件的保存方式是基于字节流的,如果java和jsp编译成 class文件过程中,使用的编码方式与源文件的编码不一致,就会出现乱码。基于这种乱码,建议在java文件中尽量不要写中文(注释部分不参与编译,写 中文没关系),如果必须写的话,尽量手动带参数-ecoding gbk或-ecoding gb2312编译;对于jsp,在文件头加上或基本上就能解决这类乱码问题。
本文要重点讨论的是第二类乱码,即java程序与其他存储媒介交互时产生的乱码。很多存储媒介,如数据库,文件,流等的存储方式都是基于字节流的,java程序与这些媒介交互时就会发生字符(char)与字节(byte)之间的转换,具体情况如下:
从页面form提交数据到java程序 byte->char
从java程序到页面显示 char?>byte
从数据库到java程序 byte?>char
从java程序到数据库 char?>byte
从文件到java程序 byte->char
从java程序到文件 char->byte
从流到java程序 byte->char
从java程序到流 char->byte
如果在以上转换过程中使用的编码方式与字节原有的编码不一致,很可能就会出现乱码。
二、解决方法
前面已经提到了java程序与其他媒介交互时字符和字节的转换过程,如果这些转换过程中容易产生乱码。解决这些乱码问题的关键在于确保转换时使用的编码方式与字节原有的编码方式保持一致,下面分别论述(java或jsp自身产生的乱码请参看第一部分)。
1、jsp与页面参数之间的乱码
jsp获取页面参数时一般采用系统默认的编码方式,如果页面参数的编码类型和系统默认的编码类型不一致,很可能就会出现乱码。解决这类乱码问 题的基本方法是在页面获取参数之前,强制指定request获取参数的编码方式:request.setcharacterencoding ("gbk")或request.setcharacterencoding("gb2312")。
如果在jsp将变量输出到页面时出现了乱码,可以通过设置response.setcontenttype("text/html; charset=gbk")或response.setcontenttype("text/html;charset=gb2312")解决。
如果不想在每个文件里都写这样两句话,更简洁的办法是使用servlet规范中的过虑器指定编码,过滤器的在web.xml中的典型配置和主要代码如下:
web.xml:
characterencodingfilter
net.vschool.web.characterencodingfilter
encodinggbk
characterencodingfilter
/*
characterencodingfilter.java:
public class characterencodingfilter implements filter
{
protected string encoding = null;
public void init(filterconfig filterconfig) throws servletexception
{
this.encoding = filterconfig.getinitparameter("encoding");
}
public void dofilter(servletrequest request, servletresponse response, filterchain chain) throws ioexception, servletexception
{
request.setcharacterencoding(encoding);
response.setcontenttype("text/html;charset="+encoding);
chain.dofilter(request, response);
}
}
2、java与数据库之间的乱码
大部分数据库都支持以unicode编码方式,所以解决java与数据库之间的乱码问题比较明智的方式是直接使用unicode编码与数据库 交互。很多数据库驱动自动支持unicode,如microsoft的sqlserver驱动。其他大部分数据库驱动,可以在驱动的url参数中指定,如 如mm的mysql驱动:jdbc:mysql://localhost/webcldb?useunicode=true& characterencoding=gbk。
3、java与文件/流之间的乱码
java读写文件最常用的类是fileinputstream/fileoutputstream和 filereader/filewriter。其中fileinputstream和fileoutputstream是基于字节流的,常用于读写二进制 文件。读写字符文件建议使用基于字符的filereader和filewriter,省去了字节与字符之间的转换。但这两个类的构造函数默认使用系统的编 码方式,如果文件内容与系统编码方式不一致,可能会出现乱码。在这种情况下,建议使用filereader和filewriter的父类: inputstreamreader/outputstreamwriter,它们也是基于字符的,但在构造函数中可以指定编码类型: inputstreamreader(inputstream in, charset cs) 和outputstreamwriter(outputstream out, charset cs)。
4、其他
上面提到的方法应该能解决大部分乱码问题,如果在其他地方还出现乱码,可能需要手动修改代码。解决java乱码问题的关键在于在字节与字符的 转换过程中,你必须知道原来字节或转换后的字节的编码方式,转换时采用的编码必须与这个编码方式保持一致。我们以前使用resin服务器,使用 smartupload组件上传文件,上传文件同时传递的中文参数获取没有乱码问题。当在linux中把resin设置成服务后,上传文件同时的中文参数 获取出现了乱码。这个问题困扰了我们很久,后来我们分析smartupload组件的源文件,因为文件上传采用的是字节流的方式,里面包含的参数名称和值 也是字节流的方式传递的。smartupload组件读取字节流后再将参数名称和值从字节流中解析出来,问题就出现在smartupload将字节流转换 成字符串时采用了系统默认的编码,而将resin设置成服务后,系统默认的编码可能发生了改变,因此出现了乱码。后来,我们更改了smartupload 的源文件,增加了一个属性charset和setcharset(string)方法,将upload()方法中提取参数语句:
string value = new string(m_binarray, m_startdata, (m_enddata - m_startdata) + 1 );
改成了
string value = new string(m_binarray, m_startdata, (m_enddata - m_startdata) + 1, charset );
终于解决了这个乱码问题
分享到:
相关推荐
针对我国煤矿冬季进风井筒容易出现风流紊乱且难于及时预防、调控的问题,结合矿井实例,对进风主井风流紊乱控制方法进行了分析,确定了通过调节供暖热风量从而减小井筒间自然风压的技术方法,并研究开发了一套能够便捷、...
肝酶和功能测试通常在临床实践中进行。 但是,肝酶紊乱并不一定总是暗示潜在的肝脏病理。 测量的标准肝酶包括丙氨酸转氨酶(ALT),天冬氨酸转氨酶(AST),γ-谷氨酰转肽酶(GGT)和丙氨酸磷酸酶(ALP)。 这些酶,...
为了解决青岗坪煤矿主井风流紊乱的问题,利用风压平衡定律对其通风系统进行分析,推导了风流紊乱的判别式;在通风阻力和自然风压测定的基础上,利用实测数据对判别式进行验证;结合判别式和现场实际情况,提出防治风流紊乱...
复杂水、电解质紊乱治疗的讲课幻灯片,共65张,医师必备基础
麦冬多糖MDG-1改善脂质代谢紊乱的作用机制研究,王旭,石林林,目的:本研究通过膳食诱导肥胖动物模型研究麦冬多糖MDG-1改善脂质代谢紊乱的作用机制;方法:32只雄性C57BL/6小鼠按体重随机分成正常�
同时,本书对这些题目进行了庖丁解牛式的分析与讲解,针对试题中涉及的部分重难点问题,进行了适当地扩展与延伸,力求对知识点的讲解清晰而不紊乱,全面而不啰嗦,使读者能够通过本书不仅获取到求职的知识,同时更有...
在回答电话面试的问题时,不要过于紧张,要留心对方的问题,这 些问题也许在当面的面试中还会再出现。如果对方在电话面试中要求你 做英文的自我介绍,或者干脆用英文和你对话,那在电话面试结束后一 定要好好准备...
heat distortion是一款ak最新发布的ae插件,又叫做热浪变形紊乱插件,通过该插件可以简单快速的就能搞定波形紊乱效果。软件操作比较简单,支持模糊,扭曲,错乱,形态等属性操作,值得一提的是插件直接支持MASK操作...
为了解决张集煤矿反风时主要进风巷风流不反向的问题,利用风压平衡定律和通风能量方程对其通风系统进行分析,推导出风流不反向的判别式;利用现场实测数据对该判别式进行验证,结果表明判别式正确可用。结合风流不反向...
数据挖掘探讨2型糖尿病合并脂代谢紊乱证治规律.pdf
我们研究的目的是在加百列·图雷教学医院的重症监护室研究脑损伤患者的水电解质紊乱,描述其临床方面,确定影响因素并确定这些患者的预后。 材料和方法:这是一项前瞻性横断面研究,描述了2015年6月至2016年4月在...
植物神经功能紊乱.doc
酸碱平衡紊乱试题.doc
通过对封闭火区使用示踪气体CF2Cl Br法圈定封闭工作面遗留高温火源点的钻孔范围,对...准确定位火区位置,有效解决了潞安新疆煤化工(集团)有限公司二矿w4204工作面封闭火区治理过程因气体紊乱无法判别高温火源点的问题。
父母、老师和心理教育评估者对黑人和白人情绪紊乱儿童问题的看法是否一致? 父母、教师和心理教育评估人员对黑人和...许多研究已经证明,在对儿童和青少年问题行为的评级中存在类似因素。 这些因子相似性在不同的研究和
滑膜与滑液改变在颞下颌关节紊乱病中的作用与意义,蔡恒星,,颞下颌关节属于滑膜关节,滑膜和滑液是其重要组成部分,具有减少关节摩擦,防止粘连,参与关节组织代谢等作用。在临床上,不同类
酸碱平衡紊乱基础知识分析.pptx
在现代化的大学教育体系中随着电脑的普及以及 internet 的飞速发展,使大 学里的各项工作的效率得到极大的提升,作为现在的大学需要开发一套属于自己 的管理系统。而设计一套完整的学生选课系统能够更佳便于学生在校...
今天小编就为大家分享一篇解决tensorboard多个events文件显示紊乱的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
酸碱平衡与酸碱平衡紊乱.ppt