翻译文献-java编程技术中汉字问题的分析及解决_第1页
翻译文献-java编程技术中汉字问题的分析及解决_第2页
翻译文献-java编程技术中汉字问题的分析及解决_第3页
翻译文献-java编程技术中汉字问题的分析及解决_第4页
翻译文献-java编程技术中汉字问题的分析及解决_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

外文原文JAVAPROGRAMMINGTECHNOLOGYINCHINESECHARACTERSANDSOLVETHEPROBLEMSOFBASEDONTHEJAVAPROGRAMMINGLANGUAGE,CHINESECHARACTERS,WEOFTENENCOUNTERTHEPROBLEMOFHANDLINGANDDISPLAYDONOTKNOWHOWTOSEEALOTOFGARBLEDCERTAINLYNOTOURWISHTOSEETHEEFFECT,HOWCANWELETTHOSECHARACTERSAPPEARCORRECTLYJAVALANGUAGEISTHEDEFAULTENCODINGUNICODE,ANDWECHINESEPEOPLEUSUALLYUSETHEDOCUMENTSANDDATABASESAREBASEDONTHEGB2312ORBIG5ENCODINGMETHODS,SUCHASHOWTOPROPERLYSELECTCHINESECHARACTERCODINGANDTHECORRECTWAYTODEALWITHTHECHINESECHARACTERENCODINGITTHISARTICLEWILLSTARTWITHCHINESECHARACTERCODINGOFCOMMONSENSE,THECOMBINATIONOFJAVAPROGRAMMINGEXAMPLESOFTHEABOVETWOISSUESANDPROPOSESOLUTIONSTOTHEIRPROGRAMMESNOWTHEJAVAPROGRAMMINGLANGUAGEHASBEENWIDELYUSEDINTHEINTERNETWORLD,ASEARLYASINTHEDEVELOPMENTOFSUNSJAVALANGUAGE,HASBEENTAKENINTOACCOUNTTHENONENGLISHCHARACTERSSUPPORTEDSUNANNOUNCEDTHEJAVARUNTIMEENVIRONMENTJREONSUBITSELFANDTHEINTERNATIONALEDITIONINENGLISH,BUTONLYTOSUPPORTTHEINTERNATIONALVERSIONOFTHENONENGLISHCHARACTERSBUTINTHEJAVAPROGRAMMINGLANGUAGEAPPLICATIONS,WITHTHESUPPORTOFCHINESECHARACTERSISNOTASJAVASOFTSTANDARDSPECIFICATIONS,ASCLAIMEDINPERFECT,BECAUSETHECHINESECHARACTERSETTOMORETHANONE,ANDDIFFERENTOPERATINGSYSTEMSONTHESUPPORTOFCHINESECHARACTERSVARYTHEREFORE,THEREWILLBEMANYANDTHECHINESECHARACTERCODINGTACKLETHEPROBLEMINOURAPPLICATIONDEVELOPMENTINTHETROUBLEDUSTHEREAREMANYANSWERSONTHESEISSUES,BUTARERELATIVELYTRIVIAL,WECANNOTMEETTHEASPIRATIONSOFURGENCYTOSOLVETHEPROBLEM,THECHINESEONTHEJAVASYSTEMISNOTMORE,THEPAPERFROMTHECHINESECHARACTERCODINGOFCOMMONSENSE,THEISSUEOFJAVACHINESE,WEHOPETOHELPSOLVETHISPROBLEMCHINESECHARACTERCODINGOFCOMMONSENSEWEKNOWTHATENGLISHISAGENERALCHARACTERTOTHATOFBYTES,THEMOSTCOMMONLYUSEDMETHODOFCODINGISASCIIHOWEVER,ABYTECANONLYDISTINGUISH256CHARACTERS,ANDTENSOFTHOUSANDSOFCHINESECHARACTERS,SONOWHAVETODOUBLEBYTECHARACTERSTOTHAT,INORDERTOSEPARATEANDENGLISHCHARACTERS,EACHBYTEOFTHEHIGHESTLEVELFORACERTAIN,THISTWOWORDDAYSAIDTHATUPTO64KGRIDCHARACTERSWEOFTENENCOUNTERISTHEENCODINGGB2312,BIG5,UNICODE,ANDSOONTURNINGTOTHESPECIFICDETAILSOFENCODING,INTERESTEDREADERSCANACCESSTHERELEVANTINFORMATIONISUPERFICIALTALKABOUTANDWECLOSETHEGB2312ANDUNICODEGB2312CODE,PEOPLESREPUBLICOFCHINANATIONALSTANDARDCHINESECHARACTERSUSEDTOEXCHANGEINFORMATIONENCODEDBYTHEPEOPLESREPUBLICOFCHINAISANATIONALSTANDARDSISSUEDBYTHEGENERALADMINISTRATIONOFSIMPLIFIEDCHINESECHARACTERSONTHEENCODING,ACCESSTOMAINLANDCHINAANDSINGAPORE,ORGBCODETWOBYTES,ABYTEHIGHBYTESOFTHEVALUEOFCODEVALUEPLUS3220H,THESECONDBYTELOWBYTESOFTHEVALUEADDEDVALUEOF3220H,WITHTHESETWOVALUESTOTHATOFACHINESECHARACTERCODINGUNICODECODEISMICROSOFTSATTEMPTTOSOLVETHEPROBLEMOFMULTINATIONALCHARACTEROFTHEMULTIBYTECODING,ANDSOLONG,ANDITSENGLISHCHARACTERSTAKEAPRECEDING“0“BYTESLONG,ANDSOTHESTRATEGYTOACHIEVECOMPATIBILITYIF“A“OFTHEASCIICODEIS0X41,UNICODEONTHE0X00,0X41THEUSEOFSPECIALTOOLSTOEACHOTHERBETWEENTHEVARIOUSCODINGCONVERSIONJAVATHEPRELIMINARYUNDERSTANDINGOFCHINESEWEBASEDONTHEJAVAPROGRAMMINGLANGUAGEFORAPPLICATIONDEVELOPMENT,INEVITABLYHAVETODEALWITHTHECHINESEJAVAPROGRAMMINGLANGUAGEISTHEDEFAULTENCODINGUNICODE,ANDWEUSUALLYUSETHEDATABASEANDDOCUMENTSAREBASEDONTHEGB2312CODING,WEOFTENENCOUNTERSUCHASITUATIONBASEDONJSPVISITTHEWEBSITETOSEEISGARBLED,SEEDOCUMENTOPENSALSOTOTHEGARBLED,THEJAVAMODIFIEDTHECONTENTOFTHEDATABASEONOTHEROCCASIONSWHENTHEAPPLICATIONCANNOTCONTINUETOPROVIDECORRECTINFORMATIONSTRINGSENGLISH“APPLE”STRINGSCHINESE“苹果”STRINGS“苹果APPLE”SENGLISHTHELENGTHIS5,SCHINESETHELENGTHOF4,ANDSTHEDEFAULTLENGTHIS14FORSENGLISHRUN,JAVAINTHEVARIOUSCATEGORIESOFSUPPORTWASVERYGOOD,CERTAINLYWILLDISPLAYCORRECTLYBUTFORSCHINESEANDS,ALTHOUGHJAVASOFTSTATEMENTOFABASICJAVAHASBEENTAKENINTOACCOUNTTHEMULTINATIONALCHARACTEROFTHESUPPORTTHEDEFAULTUNICODECODING,BUTIFTHEDEFAULTOPERATINGSYSTEMCODEISNOTUNICODE,BUTGBCODESFROMTHEJAVASOURCECODETOGETACCURATERESULTS,TOGOTHROUGH“JAVASOURCECODEJAVABYTECODEVIRTUALMACHINEOPERATINGSYSTEMDISPLAYDEVICE“PROCESSINTHEPROCESSOFEACHSTEP,WEMUSTCORRECTLYHANDLETHECHINESECHARACTERCODING,INORDERTOMAKETHEFINALRESULTWILLBEDISPLAYEDCORRECTLY“JAVASOURCECODEJAVABYTECODE“,THESTANDARDJAVACOMPILERJAVACUSEOFTHECHARACTERSINTOTHESYSTEMISTHEDEFAULTCHARACTERSET,FOREXAMPLE,INCHINESEWINDOWSOPERATINGSYSTEMISGBK,ANDTHELINUXOPERATINGSYSTEMISISO88591,SOWEWILLFINDTHATTHELINUXOPERATINGSYSTEM,COMPILEROFTHECATEGORYSOURCEOFCHINESECHARACTERSAREAPROBLEM,THESOLUTIONISTOCOMPILETIMETOADDENCODINGPARAMETERSSOTHATTHEYCANANDPLATFORMINDEPENDENTUSAGEISJAVACCENCODINGGBK“JAVABYTECODEVIRTUALMACHINEOPERATINGSYSTEM“,JAVARUNTIMEENVIRONMENTJREENGLISHANDINTERNATIONALVERSIONS,BUTONLYTOSUPPORTTHEINTERNATIONALVERSIONOFTHENONENGLISHCHARACTERSJAVADEVELOPMENTKITJDKCERTAINLYSUPPORTTHEMULTINATIONALCHARACTER,BUTNOTALLCOMPUTERUSERSHAVEINSTALLEDTHEJDKMANYOPERATINGSYSTEMANDAPPLICATIONSOFTWAREINORDERTOBETTERSUPPORTJAVA,AREEMBEDDEDINTHEINTERNATIONALVERSIONOFTHEJRE,FORTHEIRSUPPORTOFTHEMULTINATIONALCHARACTERPROVIDESACONVENIENT“OPERATINGSYSTEMDISPLAYDEVICE,“THECHINESECHARACTERS,THEOPERATINGSYSTEMMUSTSUPPORTANDBEABLETOSHOWITENGLISHOPERATINGSYSTEMIFNOTWITHSPECIALSOFTWAREAPPLICATIONS,ITISCERTAINLYNOTABLETOSHOWTHATTHECHINESETHEREISALSOAPROBLEM,THATIS,INTHEJAVAPROGRAMMINGPROCESS,THECHINESECHARACTERSFORTHECORRECTCODINGCONVERSIONFOREXAMPLE,CHINESEEXPORTSTOTHEPAGEWHENTHESTRING,WHETHERYOUUSEOUTPRINTLNSTRINGORUSE,MUSTBEUNICODETOGBKCONVERSION,ORMANUALLYORAUTOMATICALLYINJSP10,CANBEDEFINEDCHARACTERSETSOUTTOACHIEVEWITHINTHECODEOFAUTOMATICCONVERSIONUSAGEISHOWEVER,INSOMEVERSIONSOFJSPANDDIDNOTPROVIDETHEOUTPUTOFTHECHARACTERSETSUPPORTSUCHASJSP092,WHICHREQUIREMANUALCODINGOUTPUT,MEANSALOTTHEMOSTCOMMONLYUSEDMETHODISSTRINGS1REQUESTGETPARAMETER“KEYWORD”STRINGS2NEWSTRINGS1GETBYTES“ISO88591”,”GBK”GETBYTESMETHODSWILLBEUSEDCHINESECHARACTERSTO“ISO88591“ENCODINGINTOABYTEARRAY,“GBK“ISTHETARGETENCODINGWEFROMTHEISO88591ENCODEDINTHEDATABASEREADOUTTHECHINESESTRINGS1,AFTERTHECONVERSIONPROCESS,INSUPPORTOFGBKCHARACTERSINTOTHEOPERATINGSYSTEMANDAPPLICATIONSOFTWAREWILLBEABLETODISPLAYPROPERLYINTHECHINESESTRINGS2JAVACHINESESURFACEOFTHEPROBLEMANDDEALWITHBACKGROUNDDEVELOPMENTENVIRONMENTJDK115VCAFE20JPADPROSERVERSIDENTIISSYBASESYSTEMJCONNECTJDBCCLIENTIE50PWIN98CLASSFILESSTOREDINTHESERVERSIDE,BYTHECLIENTSBROWSERRUNNINGAPPLET,APPLETFRAMEONLYTRANSFERREDFROMTHEMAINPROGRAMCATEGORIES,SUCHASTHEROLEINTERFACE,INCLUDINGTEXTFIELD,TEXTAREA,LIST,CHOICE,ANDSOONIUSEJDBCTOEXECUTEASELECTSTATEMENTREADDATAFROMTHESERVERSIDECHINESE,THEDATAWILLBEADDEDTOMETHODSUSEDAPPENDTEXTAREATA,CANNOTDISPLAYCORRECTLYHOWEVER,WHENADDEDTOTHELIST,BUTTHEMAJORITYOFCHINESECHARACTERSCANBEDISPLAYEDPROPERLYDATAON“ISO88591“ENCODINGINTOABYTEARRAY,ANDTHENTHESYSTEMSDEFAULTENCODINGDEFAULTCHARACTERENCODINGINTOSTRING,TOTHETAANDTHELISTOFDISPLAYCORRECTLYOFTHEPROCEDUREAREASFOLLOWSDBSTR2RESULTSGETSTRING1/AFTERREADINGTHERESULTFROMDBSERVER,CONVERTINGITTOSTRINGDBBYTE1DBSTR2GETBYTES“ISO88591”DBSTR1NEWSTRINGDBBYTE1CONVERSIONSDONOTUSESTRINGDEFAULTENCODINGSYSTEM,ANDDIRECTUSEOF“GBK“OR“GB2312“,INAANDBBOTHCASES,THEDATAFROMTHEDATABASEDIDNOTTAKEISSUEIIAPPROACHAND“TAKECHINESELANGUAGE“OFTHEINVERSE,THEFIRSTSQLSTATEMENTBYTHESYSTEMSDEFAULTENCODINGINTOABYTEARRAY,ANDTHEN“ISO88591“ENCODINGINTOSTRING,SENDINGTHEFINALIMPLEMENTATION,CHINESEINFORMATIONINTOTHEDATABASEMAYBECORRECTOFTHEPROCEDUREAREASFOLLOWSSQLSTMTTF_INPUTGETTEXT/BEFORESENDINGSTATEMENTTODBSERVER,CONVERTINGITTOSQLSTATEMENTDBBYTE1SQLSTMTGETBYTESSQLSTMTNEWSTRINGDBBYTE1,”ISO88591”_STMT_CONCREATESTATEMENT_STMTEXECUTEUPDATESQLSTMTQUESTIONIFTHECLIENTCLASSPATHPOINTTOTHEEXISTENCEOFCLASSESZIPWHENJDKKNOWNASA,THECODECANBECORRECTLYCARRIEDOUTHOWEVER,IFTHECLIENTONLYBROWSER,BUTNOTWHENJDKANDCLASSPATHKNOWNASB,THECHINESECHARACTERSMAYNOTBEABLETOCONVERTOURANALYSIS1TESTEDINACIRCUMSTANCES,ISRUNNINGTHEDEFAULTENCODINGSYSTEMFORGBKORGB2312BINTHECIRCUMSTANCES,THECOMMENCEMENTOFTHEBROWSERJAVACONSOLEINTHEFOLLOWINGERRORMESSAGEAPPEARSCANTFINDRESOURCEFORSUNAWTWINDOWSAWTLOCALIZATION_ZH_CNTHENTHEDEFAULTENCODINGSYSTEMFORTHE“88591“2IFTHECONVERSIONDOESNOTUSESTRINGDEFAULTENCODINGSYSTEM,BUTDIRECTUSEOF“GBK“OR“GB2312“,INTHEPROCESSACASECANSTILLNORMALOPERATION,INTHEBCASES,THESYSTEMERRORSUNSUPPORTEDENCODINGEXCEPTION。3INTHECLIENT,THEJDKTHECLASSESZIPDECOMPRESSION,INANOTHERDIRECTORY,CLASSPATHTOINCLUDEONLYTHEDIRECTORYANDTHENGRADUALLYREMOVETHESIDEINTHEDIRECTORYCLASSDOCUMENTS,ONTHEOTHERTESTINGPROCEDURES,THEFINALCLASSFOUNDINMORETHAN1,000DOCUMENTS,ONLYONEISINDISPENSABLE,THEDOCUMENTSARESUNIOCHARTOBYTEDOUBLEBYTECLASS。KAODAOTHEFILESERVERANDOTHERCATEGORIESTOGETHER,ANDINTHEPROCESSOFBEGINNINGIMPORTIT,INCIRCUMSTANCESBPROCEDURESSTILLUNABLETOOPERATENORMALLY4ACIRCUMSTANCES,IFREMOVEDINCLASSPTHSUNIOCHARTOBYTEDOUBLEBYTECLASS,THEPROGRAMRUNSWHENMEASUREDDEFAULTENCODINGFORTHE“88591“OTHERWISE,FOR“GBK“OR“GB2312“IFJDK12VERSIONOFTHEABOVE,INTHEBCASESTHEPROBLEMSENCOUNTEREDBYAVERYGOODSOLUTION,TESTINGTHESTEPSIBID,INTERESTEDREADERSCANTRYOUTJAVACHINESETHEROOTOFTHEPROBLEMANALYSISANDSOLUTIONINENGLISHMSWINDOWS98JDK13,YOUCANUSESYSTEMGETPROPERTIESBYTHEJAVARUNTIMEENVIRONMENTSOMEOFTHEBASICATTRIBUTES,LIKEPOORCHINESECANHELPUSGETTHESEATTRIBUTESCLASSPOORCHINESETHESOURCECODEPUBLICCLASSPOORCHINESETHEIMPLEMENTATIONOFJAVAPOORCHINESE,WEWILLGETFILEENCODINGSYSTEMVARIABLESASTHEVALUEOFGBK,USERLANGUAGEVALUESFORZH,USERREGIONTHEVALUEOFCN,THESESYSTEMSVARIABLESDETERMINETHEVALUEOFTHESYSTEMISTHEDEFAULTENCODINGGBKINTHESESYSTEMS,THECODEBELOWGB2312DOCUMENTWILLBECONVERTEDINTOBIG5DOCUMENTS,THEYCANHELPUSUNDERSTANDTHECHINESECHARACTERCODINGINJAVATRANSFORMATIONIMPORTJAVAIOIMPORTJAVAUTILPUBLICCLASSGB2BIG5STATICINTICHARNUM0PUBLICSTATICVOIDMAINSTRINGARGSSYSTEMOUTPRINTLN“INPUTGB2312FILE,OUTPUTBIG5FILE“IFARGSLENGTH2SYSTEMERRPRINTLN“USAGEJVIEWGB2BIG5GBFILEBIG5FILE“SYSTEMEXIT1STRINGINPUTSTRINGREADINPUTARGS0WRITEOUTPUTINPUTSTRING,ARGS1SYSTEMOUTPRINTLN“NUMBEROFCHARACTERSINFILE“ICHARNUM“STATICVOIDWRITEOUTPUTSTRINGSTR,STRINGSTROUTFILETRYFILEOUTPUTSTREAMFOSNEWFILEOUTPUTSTREAMSTROUTFILEWRITEROUTNEWOUTPUTSTREAMWRITERFOS,“BIG5“OUTWRITESTROUTCLOSECATCHIOEXCEPTIONEEPRINTSTACKTRACEEPRINTSTACKTRACESTATICSTRINGREADINPUTSTRINGSTRINFILESTRINGBUFFERBUFFERNEWSTRINGBUFFERTRYFILEINPUTSTREAMFISNEWFILEINPUTSTREAMSTRINFILEINPUTSTREAMREADERISRNEWINPUTSTREAMREADERFIS,“GB2312“READERINNEWBUFFEREDREADERISRINTCHWHILECHINREAD1ICHARNUM1BUFFERAPPENDCHARCHINCLOSERETURNBUFFERTOSTRINGCATCHIOEXCEPTIONEEPRINTSTACKTRACERETURNNULLENCODEDINTOTHEPROCESSASFOLLOWSGB2312UNICODEBIG5THEIMPLEMENTATIONOFJAVAGB2BIG5GBTXTBIG5TXT,IFTHECONTENTISGBTXT“TODAYWEDNESDAY“,THEPAPERBIG5TXTBYTHECHARACTERSINTHESHOWCANBECORRECT,ANDIFTHECONTENTISGBTXT“HAPPYVALENTINESDAY“,BIG5TXTBEINTHEPAPERCORRESPONDINGTOTHE“FESTIVAL“AND“MUSIC“OFTHECHARACTERSARESYMBOLS“0X3F,THATSUNIOBYTETOCHARGB2312ANDSUNIOCHARTOBYTEBIG5THESETWOBASICCATEGORIESANDDOESNOTCOMPILEASONTHESAMECASES,JAVASBASICCATEGORIESMAYALSOBEPROBLEMATICASTHEINTERNATIONALIZATIONOFTHEDOMESTICWORKISNOTCOMPLETED,SOINTHESEBASICCATEGORIESBEFORETHERELEASE,HASNOTBEENRIGOROUSLYTESTED,WITHTHESUPPORTOFCHINESECHARACTERSISNOTASCLAIMEDBYTHEJAVASOFTASPERFECTNOTLONGAGO,IWROTEATECHNICALFRIENDSAIDTOME,HEFINALLYFOUNDACHINESEJAVASERVLETTHEROOTOFTHEPROBLEMTWOWEEKS,HEHASBEENFORTHECHINESEJAVASERVLETPLAGUEDBYPROBLEMS,BECAUSEEACHFACEASTRINGCONTAININGTHECHINESECHARACTERSMUSTBECASTINORDERTOGETTHERIGHTRESULTWHICHISRECOGNIZEDBYALLASIFTHEONLYSOLUTIONLATER,HEREALLYDIDNOTWANTTHISTOCONTINUEANFENGOON,BECAUSESUCHATHINGREALLYSHOULDNOTBEASENIORPROGRAMMERTODOTHEWORK,HEWOULDFINDOUTTHESOURCECODEOFSERVLETDECODINGTHEANALYSIS,BECAUSEHESUSPECTEDAPROBLEMINTHISPARTOFDECODINGAFTERFOURHOURSOFSTRUGGLE,HEFINALLYFOUNDTHESOURCEOFTHEPROBLEMHESUSPECTEDTHATISCORRECT,SERVLETDECODERSABSOLUTELYNOCONSIDERATIONOFTHEDOUBLEBYTE,DIRECTLYXXASACHARACTERTHEORIGINALJAVASOFTWILLBELOWLEVELOFFENDERSZHEYAOMISTAKEIFYOUAREINTERESTEDINTHISISSUEORFACETHESAMETROUBLE,YOUCANFOLLOWHISSTEPSTOSERVLETJARREVISIONHTTPUTILSTOFINDTHESOURCECODEOFSTATICPRIVATESTRINGPARSENAME,BEFORERETURNINGTOSBSTRINGBUFFERCOPYBYTEBS,ANDTHENRETURNNEWSTRINGBS,“GB2312“TOTHATCHANGEAFTERTHENEEDSOFTHEIROWNDECODERHASHTABLEFORMHTTPUTILSPARSEQUERYSTRINGREQUESTGETQUERYSTRINGORFORMHTTPUTILSPARSEPOSTDATAHASHTABLEFORMHTTPUTILSPARSEQUERYSTRINGREQUESTGETQUERYSTRINGORDONOTFORGETTHETENSOFMILLIONSCOMPILEDINTOSERVLETJARINSIDECHINESEONTHEISSUEOFJAVASSUMMARYJAVAPROGRAMMINGLANGUAGEGREWUPINTHECYBERWORLD,WHICHREQUIRESTHEMULTINATIONALCHARACTEROFJAVAHAVEVERYGOODSUPPORTJAVAPROGRAMMINGLANGUAGEADAPTEDTOTHECALCULATIONOFTHENETWORKSDEMANDFORITTOGROWRAPIDLYINTHECYBERWORLDANDLAIDASOLIDFOUNDATIONTHEFOUNDEROFJAVAJAVASOFTHASTAKENINTOACCOUNTTHEJAVAPROGRAMMINGLANGUAGETOSUPPORTTHEMULTINATIONALCHARACTER,THESOLUTIONISNOWALOTOFFLAWSINTHERE,WENEEDTOPUTSOMECOMPENSATORYMEASURESANDTHEWORLDORGANIZATIONFORSTANDARDIZATIONISALSOSTRIVETOHUMANUNITYOFALLTHETEXTINACODE,ONEOFTHEPROGRAMMEISISO10646,ITUSEDTOEXPRESSAFOURBYTECHARACTERSOFCOURSE,SUCHPROGRAMMESHAVENOTBEENUSEDBEFORE,ORHOPETHATTHEJAVASOFTSTRICTLYTOTESTITSPRODUCTSINORDERTOBRINGMORECONVENIENCEOFADATABASEANDNETWORKUSEDTORETRIEVETHECHINESEGARBLEDHANDLINGFUNCTION,THESENATEISAPROBLEMOFSTRING,THESENATEISALREADYSOLVEDTHEPROBLEMOFSTRING中文翻译JAVA编程技术中汉字问题的分析及解决在基于JAVA语言的编程中,我们经常碰到汉字的处理及显示的问题。一大堆看不懂的乱码肯定不是我们愿意看到的显示效果,怎样才能够让那些汉字正确显示呢JAVA语言默认的编码方式是UNICODE,而我们中国人通常使用的文件和数据库都是基于GB2312或者BIG5等方式编码的,怎样才能够恰当地选择汉字编码方式并正确地处理汉字的编码呢本文将从汉字编码的常识入手,结合JAVA编程实例,分析以上两个问题并提出解决它们的方案。现在JAVA编程语言已经广泛应用于互联网世界,早在SUN公司开发JAVA语言的时候,就已经考虑到对非英文字符的支持了。SUN公司公布的JAVA运行环境(JRE)本身就分英文版和国际版,但只有国际版才支持非英文字符。不过在JAVA编程语言的应用中,对中文字符的支持并非如同JAVASOFT的标准规范中所宣称的那样完美,因为中文字符集不只一个,而且不同的操作系统对中文字符的支持也不尽相同,所以会有许多和汉字编码处理有关的问题在我们进行应用开发中困扰着我们。有很多关于这些问题的解答,但都比较琐碎,并不能够满足大家迫切解决问题的愿望,关于JAVA中文问题的系统研究并不多,本文从汉字编码常识出发,分析JAVA中文问题,希望对大家解决这个问题有所帮助。汉字编码的常识我们知道,英文字符一般是以一个字节来表示的,最常用的编码方法是ASCII。但一个字节最多只能区分256个字符,而汉字成千上万,所以现在都以双字节来表示汉字,为了能够与英文字符分开,每个字节的最高位一定为1,这样双字节最多可以表示64K格字符。我们经常碰到的编码方式有GB2312、BIG5、UNICODE等。关于具体编码方式的详细资料,有兴趣的读者可以查阅相关资料。我肤浅谈一下和我们关系密切的GB2312和UNICODE。GB2312码,中华人民共和国国家标准汉字信息交换用编码,是一个由中华人民共和国国家标准总局发布的关于简化汉字的编码,通行于中国大陆地区及新加坡,简称国标码。两个字节中,第一个字节(高字节)的值为区号值加32(20H),第二个字节(低字节)的值为位号值加32(20H),用这两个值来表示一个汉字的编码。UNICODE码是微软提出的解决多国字符问题的多字节等长编码,它对英文字符采取前面加“0”字节的策略实现等长兼容。如“A”的ASCII码为0X41,UNICODE就为0X00,0X41。利用特殊的工具各种编码之间可以互相转换。JAVA中文问题的初步认识我们基于JAVA编程语言进行应用开发时,不可避免地要处理中文。JAVA编程语言默认的编码方式是UNICODE,而我们通常使用的数据库及文件都是基于GB2312编码的,我们经常碰到这样的情况浏览基于JSP技术的网站看到的是乱码,文件打开后看到的也是乱码,被JAVA修改过的数据库的内容在别的场合应用时无法继续正确地提供信息。STRINGSENGLISH“APPLE”STRINGSCHINESE“苹果”STRINGS“苹果APPLE”SENGLISH的长度是5,SCHINESE的长度是4,而S默认的长度是14。对于SENGLISH来说,JAVA中的各个类都支持得非常好,肯定能够正确显示。但对于SCHINESE和S来说,虽然JAVASOFT声明JAVA的基本类已经考虑到对多国字符的支持(默认UNICODE编码),但是如果操作系统的默认编码不是UNICODE,而是国标码等。从JAVA源代码到得到正确的结果,要经过“JAVA源代码JAVA字节码虚拟机操作系统显示设备”的过程。在上述过程中的每一步骤,我们都必须正确地处理汉字的编码,才能够使最终的显示结果正确。“JAVA源代码JAVA字节码”,标准的JAVA编译器JAVAC使用的字符集是系统默认的字符集,比如在中文WINDOWS操作系统上就是GBK,而在LINUX操作系统上就是ISO88591,所以大家会发现在LINUX操作系统上编译的类中源文件中的中文字符都出了问题,解决的办法就是在编译的时候添加ENCODING参数,这样才能够与平台无关。用法是JAVACCENCODINGGBK。“JAVA字节码虚拟机操作系统”,JAVA运行环境(JRE)分英文版和国际版,但只有国际版才支持非英文字符。JAVA开发工具包(JDK)肯定支持多国字符,但并非所有的计算机用户都安装了JDK。很多操作系统及应用软件为了能够更好的支持JAVA,都内嵌了JRE的国际版本,为自己支持多国字符提供了方便。“操作系统显示设备”,对于汉字来说,操作系统必须支持并能够显示它。英文操作系统如果不搭配特殊的应用软件的话,是肯定不能够显示中文的。还有一个问题,就是在JAVA编程过程中,对中文字符进行正确的编码转换。例如,向网页输出中文字符串的时候,不论你是用OUTPRINTLNSTRING还是用,都必须作UNICODE到GBK的转换,或者手动,或者自动。在JSP10中,可以定义输出字符集,从而实现内码的自动转换。用法是但是在一些JSP版本中并没有提供对输出字符集的支持,(例如JSP092),这就需要手动编码输出了,方法非常多。最常用的方法是STRINGS1REQUESTGETPARAMETER“KEYWORD”STRINGS2NEWSTRINGS1GETBYTES“ISO88591”,”GBK”GETBYTES方法用于将中文字符以“ISO88591”编码方式转化成字节数组,而“GBK”是目标编码方式。我们从以ISO88591方式编码的数据库中读出中文字符串S1,经过上述转换过程,在支持GBK字符集的操作系统和应用软件中就能够正确显示中文字符串S2。JAVA中文问题的表层分析及处理背景开发环境JDK115VCAFE20JPADPRO服务器端NTIISSYBASESYSTEMJCONNECT(JDBC)客户端IE50PWIN98CLASS文件存放在服务器端,由客户端的浏览器运行APPLET,APPLET只起调入FRAME类等主程序的作用。界面包括TEXTFIELD,TEXTAREA,LIST,CHOICE等。I用JDBC执行SELECT语句从服务器端读取数据(中文)后,将数据用APPEND方法加到TEXTAREA(TA),不能正确显示。但加到LIST中时,大部分汉字却可正确显示。将数据按“ISO88591”编码方式转化为字节数组,再按系统缺省编码方式(DEFAULTCHARACTERENCODING)转化为STRING,即可在TA和LIST中正确显示。程序段如下DBSTR2RESULTSGETSTRING1/AFTERREADINGTHERESULTFROMDBSERVER,CONVERTINGITTOSTRINGDBBYTE1DBSTR2GETBYTES“ISO88591”DBSTR1NEWSTRINGDBBYTE1在转换字符串时不采用系统默认编码方式,而直接采用“GBK”或者“GB2312”,在A和B两种情况下,从数据库取数据都没有问题。II处理方式与“取中文”相逆,先将SQL语句按系统缺省编码方式转化为字节数组,再按“ISO88591”编码方式转化为STRING,最后送去执行,则中文信息可正确写入数据库。程序段如下SQLSTMTTF_INPUTGETTEXT/BEFORESENDINGSTATEMENTTODBSERVER,CONVERTINGITTOSQLSTATEMENTDBBYTE1SQLSTMTGETBYTESSQLSTMTNEWSTRINGDBBYTE1,”ISO88591”_STMT_CONCREATESTATEMENT_STMTEXECUTEUPDATESQLSTMT问题如果客户机上存在CLASSPATH指向JDK的CLASSESZIP时(称为A情况),上述程序代码可正确执行。但是如果客户机只有浏览器,而没有JDK和CLASSPATH时(称为B情况),则汉字无法正确转换。我们的分析1经过测试,在A情况下,程序运行时系统的缺省编码方式为GBK或者GB2312。在B情况下,程序启动时浏览器的JAVA控制台中出现如下错误信息CANTFINDRESOURCEFORSUNAWTWINDOWSAWTLOCALIZATION_ZH_CN然后系统的缺省编码方式为“88591”。2如果在转换字符串时不采用系统缺省编码方式,而是直接采用“GBK”或“GB2312”,则在A情况下程序仍然可正常运行,在B情况下,系统出现错误UNSUPPORTEDENCODINGEXCEPTION。3在客户机上,把JDK的CLASSESZIP解压后,放在另一个目录中,CLASSPATH只包含该目录。然后一边逐步删除该目录中的CLASS文件,另一边运行测试程序,最后发现在一千多个CLASS文件中,只有一个是必不可少的,该文件是SUNIOCHARTOBYTEDOUBLEBYTECLASS。将该文件拷到服务器端和其它的类放在一起,并在程序的开头IMPORT它,在B情况下程序仍然无法正常运行。4在A情况下,如果在CLASSPTH中去掉SUNIOCHARTOBYTEDOUBLEBYTECLASS,则程序运行时测得默认编码方式为“88591”,否则为“GBK”或“GB2312”。如果JDK的版本为12以上的话,在B情况下遇到的问题得到了很好的解决,测试的步骤同上,有兴趣的读者可以尝试一下。JAVA中文问题的根源分析及解决在简体中文MSWINDOWS98JDK13下,可以用SYSTEMGETPROPERTIES得到JAVA运行环境的一些基本属性,类POORCHINESE可以帮助我们得到这些属性。类POORCHINESE的源代码PUBLICCLASSPOORCHINESE执行JAVAPOORCHINESE后,我们会得到系统变量FILEENCODING的值为GBK,USERLANGUAGE的值为ZH,USERREGION的值为CN,这些系统变量的值决定了系统默认的编码方式是GBK。在上述系统中,下面的代码将GB2312文件转换成BIG5文件,它们能够帮助我们理解JAVA中汉字编码的转化IMPORTJAVAIOIMPORTJAVAUTILPUBLICCLASSGB2BIG5STATICINTICHARNUM0PUBLICSTATICVOIDMAINSTRINGARGSSYSTEMOUTPRINTLN“INPUTGB2312FILE,OUTPUTBIG5FILE“IFARGSLENGT

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论