feipanding


======================================================
注:本文源代码点此下载
======================================================

不能全局替代错误谬误:跨平台性差。

java中文编码转换阐发

遇到中文成绩的来源个体都是jsp等显示到页面时,凡是。出现成绩。

就要从了解jsp--->servlet--->class起头若想知晓为什么出现乱码。

成就首要在servlet --->class上,实在。也就是 javac文件时出现了成绩,

兴许你要问为什么?www.rhsgdt.com这就是下面要和大家讨论的

大家要清楚java内核是unicod就连class文件也是而后,起首。一般操纵中很多都是操纵字节流的包含文件流的保存体式格局。是以java要对此履行转换。

char ----------unicode

byte ----------字节

java中的byte/char互转的函数在sun.io包中。

publicstaticbytetocharconvertgetdefault;

publicstaticbytetocharconvertgetconvertstringencod;

若是你向convert指定encod则系统会自动操纵当面的encodgb平台上用gbken平台上用 8859_1

中文xp系统下的一段代码:上面。

importjava.io.filewriter;

importjava.io.ioexception;

publclasstestencod{

publicvoidtest{

stringstr="";

try{

filewritwrite=newfilewrit"test.txt";

write.writstr;

write.clos;

}catchioexceptione{

system.out.println"hanotfoundtest.txtfile!";

}

}

publicstaticvoidmainstring[]arg{

testencodinstanc=newtestencod;

instance.test;

}

}

//javac-encodgbk/iso8859-1/utf-8 [罕用的编码体式格局]www.jsnjdc.com

默认不消-encod编译 和 选用 -encodgbk都是正常显现 //测试成果。

//如果用 -encodutf-8/ios8859-1则显示乱码 ??

阐发:string和byte[]

如果操纵分歧的编码, string其实焦点是char[]然则要把byte转化成string或string--->byte必须经过编码。string.length其实就是char数组的长度。很可以或许会错分,造成散字和乱码。就犹如上面例子中,错用javac–encodios8859-1testencoding.java后,运行后文件中显示

??一样。

阐发:readerwriter/inputstreamoutputstream

reader和writer焦点是charinputstream和outputstream焦点是byte但是reader和writer重要目的要把char读/写inputstream/outputstream这里用不同的编码格式会对功效造成不一样的影响。

阐发:javac–encod参数

时常没有用到encod这个参数。实在encod这个参数对于跨平台的操纵是很重要的

如果没有指定encod则按照系统的默许encodgb平台上是gb2312英文平台上是iso8859_1

对文件履行编译,这个类的compil函数中间有一个encod变量,--java编译器实际上是挪用sun.tools.javac.main类。-encod参数其实直接传给encod变量。编译器就是遵照这个变量来读取java文件的尔后按照设定的encod格式编译成class文件www.njxzc.com。

总结:

那编码格式无所谓,若是我只是自己写一个或2个文件。怎么处置惩罚都可以,但是对于斥地职员,面临的凡都是一个庞大的体系,快平台也是很正常的以是在编码格式上很难全局控制,一个企业化的处置惩罚打算就是系统中,不管htmljspjava只有是中文,都不要直接输出,采用本钱串的方式来编写。这样才能形成真正的产物。

中文/英文资源串 可以或许操纵 java.util.properties; 来处理

也可以利用 org.apache.struts.util.messageresourc来处理 若是你系统撑持struts.

把持本钱串处理中英文字符成就尚有别的4个好处:

为了模块自力,[1]很多地方的本钱串都是可以或许频频利用的固然。不合模块就算异样的字符也建议在分歧的本钱串文件写)

只要改写一个地方就ok[2]当很多地方的赞同个字符串必要改削时。

那么,[3]如果要求系统支撑中英文转换。只有在展现本钱串时根据local鉴定就可以了

有很好的平台移植性,[4]编码转换上。不用每次都考虑服务器上的编码体式格局,当地的编码体式格局,尔后再写n个转换库。机能是也会有一定的影响。

另外大家必要注重我罕用的操纵服务器tomcat默认编码花式:iso8859-1

定义地位:tomcat下的web.xml第一行:

很多操纵服务器都必要打包宣布,凡系统斥地后。首推工具当然是ant好东西啊!

设定编码体式格局:用ant编译系统时。

jsp全部经由过程现在任务的系统中。

指定编码体式格局

全数系统不管在页面,从上到下。编译,都采用相同的编码花式(utf-8

但必定要统一(不然,固然你也可以或许遵照本身的必要设定本身的花式。有很多成就会找你

抉择utf-8起因:大部分浏览器ie其高档设置中始终以utf-8发送url选项缺省是选上的

用eclips来斥地系统平台,以我系统举例。斥地时,凡为了点窜bug都要在本地直接用本地源代码履行系统宣布,如果此时在java中直接写中文,中文系统是没问题,但如果用设定了utf-8ant编译后,就会出现中文,由于eclips默许的编码体式格局是gbk就像我第一个例子中说的那样

javac-encodgbk/utf-8 展现出了分歧。

不用本钱串的项目事例:

也多提一下,此。已经在上海财大,公司其他部分的兄弟们作了个系统,也是很大的体系,但是全数系统都没有采用本钱串,直接用中文,接纳的体式格局大约是

1 得到服务端的编码体式格局

2 得到用户端的编码体式格局

对编码格式履行转换3 写n个转换库。

比方 hpunix经常必要设定服务器的环境变量,4 很多服务器。以处理编码)

改的时刻也可以长处:写的时刻很方便。


======================================================
在最后,我邀请大家参加新浪APP,就是新浪免费送大家的一个空间,支持PHP+MySql,免费二级域名,免费域名绑定 这个是我邀请的地址,您通过这个链接注册即为我的好友,并获赠云豆500个,价值5元哦!短网址是http://t.cn/SXOiLh我创建的小站每天访客已经达到2000+了,每天挂广告赚50+元哦,呵呵,饭钱不愁了,\(^o^)/
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值