Android第二十三課 Java檔案讀取中文亂碼
1 位元組流以及編碼轉換說明
String str = "中";
byte[] b_gbk =str.getBytes("GBK");
byte[] b_utf8 =str.getBytes("UTF-8");
String s_gbk = newString(b_gbk,"GBK");
String s_utf8 = newString(b_utf8,"UTF-8");
System.out.println(s_gbk);
System.out.println(s_utf8);
環境:Windows系統Eclipse,原始碼格式是GBK,為什麼寫明環境,主要還是跟系統顯示有關
1.1詳細剖析
第一行程式碼其實暗含:str是一個GBK編碼的字串,裡面的byte陣列儲存的編碼字串是GBK編碼的。
第二行程式碼getBytes是什麼意思呢?就是告訴系統,你把str裡面的字串內容,轉換成GBK編碼然後儲存到b_gbk,這就會涉及到GBK編碼轉換成UTF-8編碼,如果理解不了,可以這樣子想:中字在GBK裡面的編碼是這樣子這樣子,你看看中字在UTF-8的編碼是什麼,告訴我。
第四行程式碼後面有指定編碼格式,就是告訴系統,我這個String型別儲存的是GBK編碼的字串,系統在顯示該字串的時候,知道其編碼格式,採用GBK來解碼顯示。
問題1:
java讀取utf-8編碼檔案,出現中文亂碼,最大可能的原因是什麼?讀取GBK編碼檔案,是正常的!
上面已經提到過String變數是有編碼的格式要求的,預設情況下,讀取檔案的時候會根據系統的預設編碼來讀取,這種情況下,肯定就是亂碼了,因為讀取進去的就是,賦值給String就是GBK編碼。
問題2:
utf-8帶BOM的檔案會出現?這個符號,這是什麼情況?
原來BOM在檔案中也是一種字元存在,因為沒有對應的編碼輸出,所以只能夠顯示這種符號了。所以在應用中不要選擇這種編碼方式就可以了。
2 UTF-8或者GBK文字的讀取
有了上面的基礎,就可以讀取文字了。構建一個UTF-8的中文文件
public static void method()
{
try {
File file = new File("d:fengyuzaitu.txt");
byte buffer[] = newbyte[20];
FileInputStreamf ileinput = new FileInputStream(file);
fileinput.read(buffer);
Strings = new String(buffer, "UTF-8");
System.out.println(s);
fileinput.close();
}catch(IOException e) {
e.printStackTrace();
}
}
public static void method1()
{
try {
FileInputStream fileinput = new FileInputStream("d:fengyuzaitu.txt");
InputStreamReader isr = new InputStreamReader(fileinput, "UTF-8");
BufferedReader br = new BufferedReader(isr);
Stringtest = "";
test = br.readLine();
System.out.println(test);
br.close();
}catch(IOException e) {
e.printStackTrace();
}
}
這裡進行詳細描述:
方法1:直接讀取位元組流,然後指定String的編碼型別,也就是位元組流當前的編碼型別
方法2:指定讀取文字採用的編碼格式,返回的String實際上就是經過第一種方