资源描述:
《深入剖析Java编程中的中文问题及建议最优解决方法--下篇》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、4、中文问题的分类及其建议最优解决办法了解以上JAVA处理文件的原理Z后,我们就可以提出了一套建议最优的解决汉字问题的办法。我们的H标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序经编译后可以移值到任何其它的操作系统中止确运行,或拿到其它操作系统中编译后能止确运行,能止确地传递中文和英文参数,能正确地和数据库交流中英文字符串。我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即可。具体解决办法如下:1、针对直接在console上运行的
2、类对于这种悄况,我们建议在程序编写时,如果需耍从用户端接收用户的可能含有屮文的输入或含有中文的输出,程序中应该采用字符流來处理输入和输出,具体来说,应用以下ihi向字符型节点流类型:对文件:FileReader,FileWrieter其字节型节点流类型为:FilelnputStream,FileOutputStream对内存(数组):CharArrayReader,CharArrayWriter其字节型节点流类型为:ByteArrayInputstream,ByteArrayOutputStream对内存(字符串)
3、:StringReader,StringWriter对管道:PipedReader,PipedWriter其字节型节点流类型为:PipedlnputStream,PipedOutputStream同时,应该用以下面向字符型处理流來处理输入和输出:BufferedWriter,BufferedReader其字节型的处理流为:BufferedlnputeStream,BufferedOutputStreamInputstreamReader,OutputStreamWriter其字节型的处理流为:DatalnputSt
4、ream,DataOutputStream其屮InputstreamReader和InputstreamWriter用于将字节流按照指定的字符编码集转换到字符流,如:InputstreamReaderin=newInputStreamReader(System.in,"GB2312"):OutputstreamWriterout=newOutputstreamWriter(System.out,nGB2312n);例如:采用如下的示例JAVA编码就达到了要求://Read.javaimportjava.io.*;p
5、ublicclassRead{publicstaticvoidmain(String]]args)throwslOException{Stringstr=”屮文测试,这是内部硬编码的串"+"testenglishcharacter";Stringstrin="BufferedReaderstdin=newBufferedReader(newInputstreamReader(System.in,"gb2312n));//设置输入接口按中文编码BufferedWriterstdout=newBufferedW
6、riter(newOutputStreamWriter(System・out,”gb2312”));〃设置输出接口按中文编码stdout.write("请输入:”);stdout.flush();strin=stdin.readLine();stdout.write(”赵是从用尸输入的串:”+strin);stdout.write(str);stdout.flush();}}同时,在编译程序时,我们用以下方式來进行:javac・encodinggb2312Read.java其运行结果如图5所示:S
7、
8、另则试,这是内
9、部硬编码的串stenglisbcbaract"J2sdkl.4.1_01>j2sdkl.4.1_01>jauaRead:测试中文english用户输入的串:狈english:j2sdkl.4.1_01>jauac-encodinggb2312Read.jaua区C:WINNTsystem32cmd.exe图5文2、针对EJB类和不可以直接运行的支持类(如JavaBean类)由于这种类它们木身被其它的类调用,不直接与用户交互,故对这种类來说,我们的建议的处理方式是内部程序中应该采用字符流来处理程序内部的中
10、文字符串(具体如上面一节中一样),同时,在编译类时ffl-encodinggb2312参数指示源文件是中文格式编码的即可。3、针对Servlet类针对Servlet,我们建议用以下方法:在编译Servlet类的源程序时,用-encoding指定编码为GBK或GB2312,且在向用户输出时的编码部分用response对象的setContentType(,,te