|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
你希望java的IDE整合。这个是没有必要的,重要的是你理解java有多深以及怎么组织你的代码,即使没有IDE,代码照样能够编译运行的。js|办理|成绩|中文|中文乱码字符内码
每一个国度(或地区)都划定了盘算机信息互换用的字符编码集,如美国的扩大ASCII码、中国的GB2312-80、日本的JIS等,作为该国度(地区)信息处置的基本,有着一致编码的主要感化。因为各当地字符集代码局限堆叠,互相间信息互换坚苦,软件当地化版本自力保护本钱较高。因而有需要将当地化事情中的个性抽掏出来,做分歧性处置,将特别的当地化处置内容下降到起码,这就是所谓的国际化(I18N)。各类言语信息被标准为当地信息,而底层字符集接纳包括了一切字符的Unicode。
字符内码(charactercode)指的是用来代表字符的内码。我们在输出和存储文档时都要利用内码,内码分为单字节内码和双字节内码。单字节内码的英文全称是Single-ByteCharacterSets(SBCS),能够撑持256个字符编码;双字节内码的英文全称是Double-ByteCharacterSets(DBCS),能够撑持65000个字符编码,次要用来对年夜字符集的东方笔墨举行编码。
CodePage指的是一个经由选择的以特定按次分列的字符内码列表,关于初期的单字节内码的语种,CodePage中的内码按次使得体系能够依照此列表来依据键盘的输出值给出一个对应的内码。关于双字节内码,给出的是MultiByte到Unicode的对应表,如许就能够把以Unicode情势寄存的字符转化为响应的字符内码。引进对CodePage的撑持次要是为了会见多语种文件名,今朝在NTFS和FAT32/VFAT下的文件体系上都利用Unicode,这必要体系在读取这些文件名时静态地将其转换为响应的言语编码。
信任懂得JSP代码的读者对ISO8859-1必定不生疏,ISO8859-1是我们平常利用对照多的一个CodePage,它属于西欧语系。GB2312-80是在国际盘算机汉字信息手艺开展初始阶段制定的,个中包括了年夜部分经常使用的1、二级汉字和9区的标记。该字符集是几近一切的中文体系和国际化的软件都撑持的中笔墨符集,这也是最基础的中笔墨符集。
GBK是GB2312-80的扩大,是向上兼容的。它包括了20902个汉字,其编码局限是0x8140~0xFEFE,剔除高位0x80的字位,其一切字符都能够一对一映照到Unicode2.0,也就是说Java实践上供应了对GBK字符集的撑持。
>GB18030-2000(GBK2K)在GBK的基本长进一步扩大了汉字,增添了躲、蒙等多数平易近族的笔墨。GBK2K从基本上办理了字位不敷、字形不敷的成绩。
分歧开辟平台的区分
1.Tomcat4开辟平台
Windows98/2000下的Tomcat4以上版本城市呈现中文成绩(而在Linux下和Tomcat3.x中则没有成绩),次要体现是页面显现乱码。在IE中调剂字符集为GB2312,就能够一般显现了。
为办理这个成绩,可在每一个JSP的页面入手下手处加上<%@pagelanguage=“Java”contentType=“text/html;charset=gb2312”%>。不外,这还不敷,固然这时候显现了中文,可是发明从数据库读出的字段酿成了乱码。经由剖析发明:在数据库中保留的中笔墨符是一般的,数据库用ISO8859-1字符集存取数据,而Java程序在处置字符时默许接纳一致的ISO8859-1字符集(这也表现了Java国际化头脑),以是在数据增加的时分Java和数据库都是以ISO8859-1体例处置,如许不会堕落。可是在读取数据的时分就呈现成绩了,由于数据读出也接纳ISO8859-1字符集,而JSP的文件头中有语句<%@pagelanguage=“Java”contentType=“text/html;charset=gb2312”%>,这申明页面接纳GB2312的字符集显现,如许就和读出的数据纷歧样。这时候页面显现从数据库中读出的字符是乱码,办理的办法是对这些字符转码,从ISO8859-1转成GB2312,就能够一般显现了。这个办理举措对良多平台具有通用性,读者能够天真使用。
2.Tomcat3.x、Resin及Linux平台
在Tomcat3.x、Resin中或是在Linux下,没有到场语句<%@pagelanguage=“Java”contentType=“text/html;charset=gb2312”%>,而页面中的<metahttp-equiv=“Content-Type”content=“text/html;charset=gb2312”>语句起了感化,此时能够一般显现。相反,假如加上<%@pagelanguage=“java”contentType=“text/html;charset=gb2312”%>体系会报错,申明Tomcat4以上版本的引擎在处置JSP时仍是有不同的。
别的,关于分歧的数据库如SQLServer,Oracle,Mysql,Sybase等,字符集的选择很主要。假如思索多言语版本,数据库的字符集就应当一致接纳ISO8859-1,必要输入的时分在分歧的字符集之间做转换就能够了。
以下是针对分歧平台的总结:
(1)JSWDK只合适于一般开辟,不乱性和其他成绩大概不如贸易软件。因为JDK1.3版功能要好过JDK1.2.2良多,而且对中文的撑持也较好,以是应当只管接纳。
(2)作为收费的贸易软件,Resin不但速率快、不乱、主动编译,还能够指出堕落行,并可在服务器端撑持利用JavaScript等,并且对中文的撑持也很好。
(3)Tomcat仅仅是一个对JSP1.1、Servlet2.2尺度的完成,我们不该该请求这个收费软件在细节和功能上都八面玲珑,它次要思索英文用户,这也是为何不做特别转换,汉字用URL办法传送就有成绩的缘故原由。年夜部分IE扫瞄器缺省一直以UTF-8发送,这仿佛是Tomcat的一个不敷,别的Tomcat不论以后的操纵体系是甚么言语,都按ISO8859往编译JSP,仿佛也不当。
JSP代码的中文处置
在JSP代码中以下几处常常必要触及到中文处置:
1.在URL中附带中文参数。这里中文参数一般能够间接读取,比方:<%=request.getParameter(“showword”)%>
2.在JSWDK中读取HTML表单提交的中文值这时候必要加以编码,较为简便的写法是:
Stringname1=newString(request.getParameter(“user_id”).getBytes(“ISO8859_1”))。
别的,在JDK1.3的撑持下,不需到场<%@pagecontentType=“text/html;charset=gb2312”%>,而在JDK1.2.2以下,即便以上两种办法同时使用也很不不乱。但在Resin平台,情形较好,只需在页面第一行到场:<%@pagecontentType=“text/html;charset=gb2312”%>便可准确处置中文,假如再加代码则反而不合错误。
3.在JSWDK中Session包括的中文,假如从表单中读出的值经由编码可准确显现,但间接付与中文值则不可,而Resin平台则很好。
4.在编译Servlet和JSP时到场代码选项。在编译Servlet时利用Java-EncodingISO8859-1myservlet.java;在JSP的ZONE设置文件中,修正编译参数为:Compiler=builtin-javac-encodingISO8859-1。利用这类办法后,不必要做其他的修改就能够一般显现中文了。
别的,盛行的干系数据库体系都撑持数据库Encoding,也就是说在创立数据库时能够指定它本人的字符集设置,数据库的数据以指定的编码情势存储。当使用程序会见数据时,在出口和出口处城市有Encoding转换。关于中文数据,数据库字符编码的设置应该包管数据的完全性。GB2312、GBK、UTF-8等都是可选的数据库Encoding,也能够选择ISO8859-1(8-bit),但会增添了编程的庞大度,ISO8859-1不是保举的数据库Encoding。在JSP/Servlet编程时,能够先用数据库办理体系供应的办理功效反省个中的中文数据是不是准确。
处置办法实例
上面是两个详细的中文乱码办理实例,读者细心研讨后大概会有所劳绩。
1.罕见的字符转换办法
将Form中的值传送到数据库中再取出来后全变成了“?”。Form用POST提交数据,代码中利用了语句:Stringst=new(request.getParameter(“name”).getBytes(“ISO8859_1”)),并且也声了然charset=gb2312。
要处置Form中传送的中文参数,应当在JSP中到场上面的代码,别的界说一个专门办理这个成绩的getStr类,然后对吸收到的参数举行转换:
Stringkeyword1=request.getParameter(“keyword1”);
keyword1=getStr(keyword1);
如许就能够办理成绩了,代码以下:
<%@pagecontentType=“text/html;charset=gb2312”%>
<%!
publicStringgetStr(Stringstr){
try{Stringtemp_p=str;
byte[]temp_t=temp_p.getBytes(“ISO8859-1”);
Stringtemp=newString(temp_t);
returntemp;
}
catch(Exceptione){}
return“NULL”;
}
%>
<%--http://www.cndes.com测试--%>
<%Stringkeyword=“创联收集手艺中央接待您的到来”;
Stringkeyword1=request.getParameter(“keyword1”);
keyword1=getStr(keyword1);
out.print(keyword);
out.print(keyword1);
%>
2.JDBCDriver的字符转换
今朝年夜多半JDBCDriver接纳当地编码格局来传输中笔墨符,比方中笔墨符“0x4175”会被转成“0x41”和“0x75”举行传输。因而必要对JDBCDriver前往的字符和要发给JDBCDriver的字符举行转换。当用JDBCDriver向数据库中拔出数据时,必要先将Unicode转成Nativecode;当JDBCDriver从数据库中查询数据时,则必要将Nativecode转换成Unicode。上面给出了这两种转换的完成:
Stringnative2Unicode(Strings){
if(s==null||s.length()==0){
returnnull;
}
byte[]buffer=newbyte[s.length()];
for(inti=0;is.length();i++){if(s.charAt(i)>=0x100){
c=s.charAt(i);
byte[]buf=(“”+c).getBytes();
buffer[j++]=(char)buf[0];
buffer[j++]=(char)buf[1];
}
else{buffer[j++]=s.ch
java比较简单,没有C++的烦琐,但学习时最好有C++为基础.与JSP和SQL起应用,功能强大. |
|