茫茫網海中的冷日
         
茫茫網海中的冷日
發生過的事,不可能遺忘,只是想不起來而已!
 恭喜您是本站第 1676248 位訪客!  登入  | 註冊
主選單

Google 自訂搜尋

Goole 廣告

隨機相片
IMG_60D_00010.jpg

授權條款

使用者登入
使用者名稱:

密碼:


忘了密碼?

現在就註冊!

爪哇咖啡屋 : [轉貼]Java讀取文件中含有中文的解決辦法

發表者 討論內容
冷日
(冷日)
Webmaster
  • 註冊日: 2008/2/19
  • 來自:
  • 發表數: 15771
[轉貼]Java讀取文件中含有中文的解決辦法
發表日期:2003-08-18 作者:beyondii[] 出處:Java读取文件中含有中文的解决办法 - 技术文档 - JAVA - 立华软件园
折磨了一天的問題,終於在黃昏的時候解決了,現在一吐為快。
眾所周知,java的中文問題一直是一個老大難的問題,這個現象可以在csdn中java論壇裡關於中文亂碼的提問率就可以瞭解到,甚至軟件巨人IBM專門開闢了一個解決中文問題的專區,作為一個俗人(一直夢想希望想金凱利那樣成為一個「冒牌天神」,只是一直沒有成功,也許是因為上帝不照顧中國吧),我也為同意的問題困擾,好在今天解決了。
隨著我對.net平台的徹底放棄(只是生活所迫,畢竟我還要生活),將原有的資源轉到Java平台上來是我當前的一個重要任務之一,說到這裡,不得不承認.net對中文問題解決的很好,雖然偶爾也會出現亂碼。
問題是這樣的,我的box(http://www.ibeyond.org/box/)原來是使用asp.net寫的(當時只是為了嘗試新的技術),當時為了數據的可移植性我放棄了使用數據庫,將全部數據保存為UTF-8編碼的文本文件,在.net中讀取這種文件秩序只要指定打開文件的編碼方式,中文問題就可以避免。但是按照我以前的思維,java中不是這麼作的,java中都是先讀取後轉換的,最後的結果證明我錯了,看來經驗主意害死人呀。
File f=new File((new BoxConfig()).getBaseDir()+"Data\\"+request.getParameter("ID")+".inc");
BufferedReader reader = new BufferedReader(new FileReader(f));
String line;
while((line=reader.readLine())!=null){
  strContent+=line;
}

這是我最初的代碼f就是我要讀取的UTF-8格式的文本文件,這一天中經過了無數次的嘗試,包括new String(strContent.getBytes("UTF-8"))(其中嘗試了N種編碼轉換),System.setProperty("file.encoding","UTF-8")(其中指定了N種編碼轉換),都失敗了,其中甘苦相信各位經歷過被程序折磨的各位看官都有所瞭解,在此略過。終於在Google中無數次查詢中得到了一個後來被證明很重要的一條信息「讀取文件時指定字符編碼」,一語點醒夢中人,.net中不就是這麼實現的嗎?走了一圈彎路終於解決了這個問題。
File f = new File("E:\\eclipse\\workspace\\box\\Data\\2003-3-7-100.inc");
InputStreamReader read = new InputStreamReader (new FileInputStream(f),"UTF-8");
BufferedReader reader=new BufferedReader(read);
String line;
while ((line = reader.readLine()) != null) {
  System.out.println(line);
}

通過打開文件是指定文件編碼的方法把這個問題輕鬆的解決了。
最後總結一下:java要讀取數據流的時候一定要指定數據流的編碼方式(至少讀取String流的時候要這麼作。
你也許可以通過csdn@ibeyond.org和我聯繫。" target="_blank">Http://www.ibeyond.org/得到相關信息,你也可以通過csdn@ibeyond.org和我聯繫。
本文的版權歸iBeyond所有,轉載時請註明轉載出處。
前一個主題 | 下一個主題 | 頁首 | | |



Powered by XOOPS 2.0 © 2001-2008 The XOOPS Project|