FileReader讀取中文txt檔案編碼丟失問題

2021-09-23 13:16:52 字數 957 閱讀 1714

有乙個utf-8編碼的文字檔案,用filereader讀取到乙個字串,然後轉換字符集:str=new string(str.getbytes(),"utf-8");結果大部分中文顯示正常,但最後仍有部分漢字顯示為問號! 

public static listgetlines(string filename)

br.close();

} catch (filenotfoundexception e) catch (ioexception e) {}

return lines;

}

檔案讀入時是按os的預設字符集即gbk解碼的,我先用預設字符集gbk編碼str.getbytes(「gbk」),此時應該還原為檔案中的位元組序列了,然後再按utf-8解碼,生成的字串按理說應該就應該是正確的。 

為什麼結果中還是有部分亂碼呢? 

問題出在filereader讀取檔案的過程中,filereader繼承了inputstreamreader,但並沒有實現父類中帶字符集引數的建構函式,所以filereader只能按系統預設的字符集來解碼,然後在utf-8 -> gbk -> utf-8的過程中編碼出現損失,造成結果不能還原最初的字元。 

原因明確了,這個問題解決起來並不困難,用inputstreamreader代替filereader,inputstreamreader isr=new inputstreamreader(new fileinputstream(filename),"utf-8");這樣讀取檔案就會直接用utf-8解碼,不用再做編碼轉換。 

public static listgetlines(string filename)

br.close();

} catch (filenotfoundexception e) catch (ioexception e) {}

return lines;

}

FileReader讀取檔案

前言 filereader是一種非同步檔案讀取機制,結合input file可以很方便的讀取本地檔案。在介紹filereader之前,先簡單介紹input的file型別。input的file型別會渲染為乙個按鈕和一段文字。點選按鈕可開啟檔案選擇視窗,文字表示對檔案的描述 大部分情況下為檔名 file...

FileReader檔案讀取API

用來把檔案讀入記憶體,並且讀取檔案中的資料。filereader介面提供了乙個非同步api,使用該api可以在瀏覽器主線程中非同步訪問檔案系統,讀取檔案中的資料。1 filereader介面的方法 filereader介面有4個方法,其中3個用來讀取檔案,另乙個用來中斷讀取。無論讀取成功或失敗,方法...

FileReader檔案讀取操作

1.filereader 描述 filereader是html5中新增的乙個類,用來對input中 檔案上傳操作file型別 進行處理的類。通過該類建立的物件中提供了一些方法,能夠對上傳的檔案進行 預先的讀寫 從而在某種情況下實現 預覽 效果。說明 檔案讀寫一般分為三種方式 1 文字讀取 2 url...