Java IO讀寫中文各種亂碼問題 【轉】


Java IO讀寫中文各種亂碼問題

轉自:http://blog.sina.com.cn/s/blog_484ab56f0101muzh.html

 

java.io.*讀寫中文各種亂碼,很費勁。不完全解決方法如下:

對於Reader,直接使用Reader系列讀取中文會亂碼,需要先生成InputStream,再通過InputStreamReader轉換為Reader,同時設定編碼,才能避免亂碼。如
   FileInputStream fis = new FileInputStream("D:/a.txt");
   BufferedReader br = new BufferedReader(new InputStreamReader(fis,"gb2312"));
 
對於RandomAccessFile,直接用RandomAccessFile去寫中文的時候會有亂碼,要這樣使用寫才沒有亂碼。
RandomAccessFile raf = new RandomAccessFile("D:/c.txt","rw");
raf.seek(raf.length());//從文件尾部寫
raf.write("我勒個去".getBytes("UTF-8"));//UTF-8或者gbk以打開的文件的實際編碼為准。這個是文本文件是UTF-8編碼時
raf.write("我勒個去".getBytes("gbk"));//這個是文本文件是gbk編碼時
 
而RandomAccessFile的readLine方法讀的時候,居然又變成了用8859_1編碼讀……不可思議啊。使用String的getByte和構造方法轉換。
   RandomAccessFile raf = new RandomAccessFile("D:/cc.txt","rw"); //源文件是Gbk編碼
   String l = raf.readLine(); //這會按照8859_1讀   
   l = new String(l.getBytes("8859_1"),"gbk"); //將8859_1轉成Gbk。如果源文件是utf-8,這兒就改成utf-8
 
另外發現幾個類有轉碼的功能
PrintWriter(String filename, String csn);//PrintWriter的構造函數可以選擇編碼(Csn:charset name),csn可以是"UTF-8"或者"gbk"
"字符串".getBytes("UTF-8"); //String字符串在轉為Byte[]時可以按指定編碼轉
new String(byte[] b, String csn); //這個可以將byte[]編碼轉換
 
System.out.print(Charset.defaultCharset()); //可以顯示系統當前默認編碼是什么。默認編碼會作為程序中各種編碼使用


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM