在使用位元組流讀取文本内容後,将讀取内容打出到控制台,發現亂碼。
但是将改文本檔案内容複制到另一個文本檔案中時,内容正常顯示漢字。
FileInputStream fis =new FileInputStream("C:\\Users\\PCTC\\Desktop\\file\\map.txt");
FileOutputStream fos = new FileOutputStream("C:\\Users\\PCTC\\Desktop\\file\\map1.txt");
int by ;
while ((by = fis.read()) != -1){
System.out.print((char)by);
fos.write(by);
}
fis.close();
fos.close();
因為複制檔案時是讀取一個位元組寫入一個位元組。然後最終根據這些位元組流拼成漢字。
一個漢字存儲:
如果是GBK編碼,占用2個位元組
如果是UTF - 8編碼,占用3個位元組
public static void main(String[] args) throws UnsupportedEncodingException {
// String a = "abc";
// byte[] bys =a.getBytes(); //[97, 98, 99]
String s = "中國";
// byte[] bys = s.getBytes(); [-28, -72, -83, -27, -101, -67]
// byte[] bys = s.getBytes("Utf-8"); [-28, -72, -83, -27, -101, -67]
byte[] bys = s.getBytes("GBK");//[-42, -48, -71, -6]
System.out.println(Arrays.toString(bys));
}
**
采用何種規則編碼,就要采用對應規則解碼,否則就會出現亂碼
**
String s = "中國";
byte[] bys = s.getBytes("Utf-8");
System.out.println(Arrays.toString(bys));
String sa = new String(bys,"Utf-8");
System.out.println(sa);
輸入結果為
[-28, -72, -83, -27, -101, -67]
中國