如果以最原始的inputstream outputstream为例,如果在键盘上敲个A字母,有几位大师说这个A在进入数据流之前,要先经过GBK的编码,使其变成一个字节的数据,这也是为什么一次read()就可以把A给读出来的原因。那么如果我把这个数据用read()读取,并用write()写入一个文本文件时,这个文本中记录的应该是A的GBK编码,没错吧? 那么我要是打开文本时,文本显示的是A,也就是说文本是如何知道用GBK编码来解读这个数据的? 我的程序如下,我在键盘上敲击A,在文本上显示的也确实是A,但有个问题想问一下,由于我敲击A时,在i中得到的实际是A的GBK码,也就是说文本中存在的是A的GBK码,哪是不是说文本是可以自动识别GBK码的?要不然无法解释为何在文本中能显示啊。 import java.io.*; 
public class Test 

public static void main(String [] args) 

try 

System.out.print("INPUT: "); 
  int i=System.in.read(); 
File file=new File("abc.txt"); 
        FileOutputStream fos=new FileOutputStream(file); 
        fos.write(i); }catch(IOException e) 



解决方案 »

  1.   

    使用到汉字的时候才会GBK编码。
      

  2.   

    先前的确是编码,当new String("字符串")时,是解码。
    ##############################################
    例子:
    String s="你好";
    byte[] buf=s.getBytes("UTF-8"); //用指定的UTF-8编码
    String s1=new String(buf,”GBK"); //用指定的GBK解码
    System.out.println(s1);运行结果为乱码。
      

  3.   

    答:
    1)问:说这个A在进入数据流之前,要先经过GBK的编码?
    答:要经过编码。(若是WIN平台,则是先经过GBK编码,若是LINUX,则是先经过UTF-8编码)
    2)这个文本中记录的应该是A的GBK编码,没错吧?
    答:可能是GBK或UTF-8,见1)
    3)是如何知道用GBK编码来解读这个数据的? 
    答:当用编辑器打开文件时,若文件没有BOM字节数据,则按平台默认的编码(WIN下GBK,LINUX下UTF-8),若有BOM,则按BOM规定的编码处理
    4)在键盘上敲击A,在文本上显示的也确实是A?
    答:由于标准ASCII码字符在0-127之间,而无论是GBK还是UTF-8,对标准ASCII码字符编码都是一样的,因而:
    “敲击A,在文本上显示的也确实是A”在任何平台都是正确的。但是:若楼主在WIN下输入一个汉字(如:‘啊’),将生成的这个文件在LINUX下打开,看到什么了?乱码了
      

  4.   

    使用到汉字的时候才会GBK编码