仓酷云
标题:
JAVA网页设计Java字符丧失与中文编码
[打印本页]
作者:
山那边是海
时间:
2015-1-18 11:40
标题:
JAVA网页设计Java字符丧失与中文编码
再举这样一个例子:如果你想对一个数字取绝对值,你会怎么做呢?java的做法是intc=Math.abs(-166);而ruby的做法是:c=-166.abs。呵呵,这就看出了java与ruby的区别。编码|中文1.弁言
在用JAVA举行开辟时,偶然在IO操纵中会发生字符丧失征象。如在用BEA的WORKSHOP开辟CMPEJB过程当中,老是编译欠亨过,报错:
cannotresolvesymbol
symbol:classExcetion
location:classeaitest.vip.firmorder.FirmOrderBean_g8ghds__WebLogic_CMP_RDBMS
}catch(Excetionex){
能够看到分明“Excetion”拼写毛病。而这段代码是WORKSHOP主动天生。可是,在某些呆板上,一样的工程文件,编译就可以经由过程。接洽BEA工程师,也不克不及办理此成绩。
笔者查阅大批材料,很难找到相干成绩的先容。一次在偶然查阅SUN的缺点库[i]时,发明是因为GB18030中文编码成绩而至。
2.成绩剖析
国度尺度GB18030-2000《信息互换用汉字编码字符集基础集的扩大》是我国继GB2312-1980和GB13000-1993以后最主要的汉字编码尺度,是我国盘算机体系必需遵守的基本性尺度之一。国度质监总局划定GB18030过渡期(即2001年8月31日)后正式公布或出厂的产物,必需切合GB-18030相干请求。
操纵体系默许外部编码一样平常并非GB18030,今朝已知在WINDOWS XP操纵体系中,举行某些组件的晋级后,会把操纵体系的默许编码由GB2312变动为GB18030。
可是即使在最新公布的JDK1.4.2_06版本中,对其撑持仍存在必定成绩。GB18030成绩次要体现是,基于java的使用,触及GB18030编码与别的编码计划转换时,存在字符丧失征象。
成绩的缘故原由是java在处置由sun.nio.cs.ext.ExtendedCharsets供应的扩大字符集时,会举行字符缓冲。可是关于缓冲字符没有接纳新的sun.nio.cs.ext包处置,而是延用原有处置体例,这类体例在多线程操纵下对GB18030编码计划处置存在成绩,如许招致部分字符丧失。
此成绩只影响GB18030编码计划,对GB2312等中文编码计划并没有影响。
当操纵体系默许编码计划为GB18030时,假如举行文件写操纵,未指定编码计划情形下,java接纳操纵体系默许编码计划操纵,这时候最简单呈现GB18030成绩。
检察操纵体系默许编码,能够运转以下java程序:
publicclassEchoDefaultSystemEncoding{
publicstaticvoidmain(String[]args){
Stringencoding=System.getProperty(“file.encoding”);
System.out.println(“DefaultSystemEncoding:”+encoding);
}
}
在用WORKSHOP开辟CMPEJB呈现成绩的操纵体系默许编码即为GB18030。
因为碰到此成绩的人对照少。而真正碰到时,良多人经由过程从头安装操纵体系能够办理成绩,因此这方面的材料很难找到。
3.办理举措
最幻想的办理举措就是由SUN修改此BUG。此成绩早在2003年11月即提出,可是直到今朝(2004/12/30),成绩形态仍为“Inprocess,bug”。
替换的办理计划次要思绪是避开GB18030编码,次要有两种办法
改动操纵体系默许编码计划
关于unix/linux平台,修正操纵体系编码计划很复杂。如在solaris平台下,运转以下命令便可改动体系编码:
LANG=zh.GBK;exportLANG
关于windows平台,修正操纵体系中文默许编码对照庞大。实验把操纵体系的“地区和言语选项”变动为别的区域,选用别的言语,都没无效果。与微软客户服务接洽,也不克不及供应响应办理计划。
运转java使用时指定默许编码
在运转基于JAVA的使用时,加上参数:
javaCDfile.encoding=GB2312
把java使用的默许编码计划与GB2312硬绑定,即在未指明编码计划时,接纳GB2312编码。
假如针对每一个使用,举行上述修正,事情量很年夜。有些使用内里又隐式挪用内部JAVA使用,更增添修改的难度。对照可行的举措是对java的运转文件举行修改,令其在运转时主动加上“-Dfile.encoding=GB2312”参数。
倡议windows平台接纳本办法举行修改。计划以下:
1、更名原java.exe,javaw.exe,如改成javabak.exe,javawbak.exe
2、重写java.exe和javaw.exe,令其运转时挪用javabak.exe,javawbak.exe,并在运转时加上“-Dfile.encoding”参数。
以下c代码便可完成上述功效:
#include"string.h"
#include"stdlib.h"
intmain(intargc,char*argv[])
{
chararg[100000]="javabak.exe-Dfile.encoding=GB2312";
for(inti=1;i<argc;i++){
strcat(arg,argv[i]);
strcat(arg,"");
}
system(arg);
return0;
}
编译后(注重修正arg值),天生的文件定名为java.exe和javaw.exe,安排在<JAVA_HOME>/bin和<JAVA_HOME>/jre/bin目次下,便可。
经理论,此举措能够办理GB18030成绩,而且不会带来别的隐患。独一的弱点是在运转JAVA使用时,会有一个分外的DOS窗口翻开,此窗口能够封闭,不会对使用运转带来影响。
4.总结
在使用开辟中,中文编码一向是一个对照贫苦的成绩。只管今朝GB18030是国度强迫性尺度,有着林林总总的长处,但因为其推出工夫尚短,在使用方面临其撑持还不敷完美,仍是应尽量接纳GB2312等兼容性对照强的中文编码计划。
本文给出的办理计划,不但合用于办理JAVA平台对GB18030撑持成绩,并且,也为指定通用JAVA运转默许参数,供应了另外一种思绪。
但是一些大型开发或者是保密型比较高的项目都会用java,原因有2点,一:java是开源的,不怕别人留后门,偷我工具,.net就不一样了,保持微软的一向风格,源代码不公开
作者:
小女巫
时间:
2015-1-21 12:35
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
只想知道
时间:
2015-1-25 20:33
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者:
若相依
时间:
2015-1-26 22:39
多重继承(以接口取代)等特性,增加了垃圾回收器功能用于回收不再被引用的对象所占据的内存空间,使得程序员不用再为内存管理而担忧。在 Java 1.5 版本中,Java 又引入了泛型编程(Generic Programming)、类型安全的枚举、不定长参数和自动装/拆箱等语言特性。
作者:
若天明
时间:
2015-2-1 07:30
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者:
小妖女
时间:
2015-2-7 01:38
是一种使网页(Web Page)产生生动活泼画面的语言
作者:
第二个灵魂
时间:
2015-2-9 17:11
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者:
海妖
时间:
2015-2-27 12:27
其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。
作者:
仓酷云
时间:
2015-3-9 03:39
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者:
蒙在股里
时间:
2015-3-15 22:05
应用在电视机、电话、闹钟、烤面包机等家用电器的控制和通信。由于这些智能化家电的市场需求没有预期的高,Sun公司放弃了该项计划。随着1990年代互联网的发展
作者:
冷月葬花魂
时间:
2015-3-19 23:26
是一种将安全性(Security)列为第一优先考虑的语言
作者:
再见西城
时间:
2015-3-21 00:51
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者:
兰色精灵
时间:
2015-3-22 04:09
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
柔情似水
时间:
2015-4-1 00:00
科学超级计算机、移动电话和互联网,同时拥有全球最大的开发者专业社群。
作者:
飘灵儿
时间:
2015-4-18 03:50
接着就是EJB了,EJB就是Enterprise JavaBean, 看名字好象它是Javabean,可是它和Javabean还是有区别的。它是一个体系结构,你可以搭建更安全、更稳定的企业应用。它的大量代码已由中间件(也就是我们常听到的 Weblogic,Websphere这些J2EE服务器)完成了,所以我们要做的程序代码量很少,大部分工作都在设计和配置中间件上。
作者:
金色的骷髅
时间:
2015-4-21 22:09
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。
作者:
不帅
时间:
2015-5-1 20:09
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
作者:
爱飞
时间:
2015-5-1 22:54
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者:
谁可相欹
时间:
2015-7-2 23:49
Java 编程语言的风格十分接近C、C++语言。
作者:
简单生活
时间:
2015-7-7 18:33
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
欢迎光临 仓酷云 (http://ckuyun.com/)
Powered by Discuz! X3.2