java中文问题及解决方法,深入Java中文问题及最优解决方法-下

4、中文问题的分类及其建议最优解决办法

了解以上JAVA处理文件的原理之后,我们就可以提出了一套建议最优的解决汉字问题的办法。

我们的目标是:我们在中文系统中编辑的含有中文字符串或进行中文处理的JAVA源程序经编译后可以移值到任何其它的操作系统中正确运行,或拿到其它操作系统中编译后能正确运行,能正确地传递中文和英文参数,能正确地和数据库交流中英文字符串。

我们的具体思路是:在JAVA程序转码的入口和出口及JAVA程序同用户有输入输出转换的地方限制编码方法使之正确即可。

具体解决办法如下:

1、 针对直接在console上运行的类

对于这种情况,我们建议在程序编写时,如果需要从用户端接收用户的可能含有中文的输入或含有中文的输出,程序中应该采用字符流来处理输入和输出,具体来说,应用以下面向字符型节点流类型:

对文件:FileReader,FileWrieter

其字节型节点流类型为:FileInputStream,FileOutputStream

对内存(数组):CharArrayReader,CharArrayWriter

其字节型节点流类型为:ByteArrayInputStream,ByteArrayOutputStream

对内存(字符串):StringReader,StringWriter

对管道:PipedReader,PipedWriter

其字节型节点流类型为:PipedInputStream,PipedOutputStream

同时,应该用以下面向字符型处理流来处理输入和输出:

BufferedWriter,BufferedReader

其字节型的处理流为:BufferedInputeStream,BufferedOutputStream

InputStreamReader,OutputStreamWriter

其字节型的处理流为:DataInputStream,DataOutputStream

其中InputStreamReader和InputStreamWriter用于将字节流按照指定的字符编码集转换到字符流,如:

InputStreamReader in = new InputStreamReader(System.in,"GB2312");

OutputStreamWriter out = new OutputStreamWriter (System.out,"GB2312");

例如:采用如下的示例JAVA编码就达到了要求:

//Read.java

import java.io.*;

public class Read {

public static void main(String[] args) throws IOException {

String str = "\n中文测试,这是内部硬编码的串"+"\ntest english character";

String strin= "";

BufferedReader stdin = new BufferedReader(new InputStreamReader(System.in,"gb2312")); //设置输入接口按中文编码

BufferedWriter stdout = new BufferedWriter(new OutputStreamWriter(System.out,"gb2312")); //设置输出接口按中文编码

stdout.write("请输入:");

stdout.flush();

strin = stdin.readLine();

stdout.write("这是从用户输入的串:"+strin);

stdout.write(str);

stdout.flush();

}}

同时,在编译程序时,我们用以下方式来进行:

javac -encoding gb2312 Read.java

其运行结果如图5所示:

8a9f14bee91d6c230ce68eae824ebbe3.gif

图5

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值