看板 java 關於我們 聯絡資訊
環境:JDK 1.6、Windows XP 讀入的文字檔大約 1MB 左右,存檔編碼是 ANSI code 用以下的程式碼做讀檔時,印文字檔案內容到部分就會停下來, 而且印的那一行只會印部分,但最後會印出 Done. public static void main(String[] args) throws IOException { Scanner fin = new Scanner(new File("text.txt")); while(fin.hasNext()){ String str = fin.nextLine(); System.out.println(str); } System.out.println("Done."); fin.close(); } 如果用記事本另存新檔成 UTF-8,就可以全部讀完檔案, 轉成 UTF-8 之後的檔案,再重新存檔成 ANSI 又會停到同樣的位置。 猜測可能是因為有中文字元的關係,但停下來的位置並非有中文的那一行, 不知道是不因為 Scanner 的 Buffer 讀到有中文字就會停下來? (檔案中的中文字都是可以用ANSI呈現) 想請問這實際上是什麼問題? 如果讀檔格式一定是 ANSI 的話,有什麼好用的處理方式呢? 謝謝。 題外話:最近執行一隻純C寫的程式,讀檔ANSI沒問題,UTF-8卻讀檔不完整。 http://tinyurl.com/pvm88jf "*******15-2**********058****" 只會印出 "*******15-2** 就停止了 -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 163.14.67.11
PsMonkey:不設定 charset 這樣沒問題嗎? 05/23 10:03
AzureCoder:有沖廁(flush)嗎 05/23 11:05
PsMonkey:應該不是 flush 的問題吧? 他中途就斷了 05/23 11:22
realmeat:我覺得是encoding的問題 05/23 11:51
swpoker:就是編碼啦ansi就是ms系統預設的ms950拉 05/23 15:13
henry035:因為同時會讀到 ANSI、UTF-8 兩種格式的檔案,怎麼處理 05/23 16:51
henry035:比較好呢? 謝謝。 05/23 16:53
swpoker:沒有規則嗎~例如從目錄/檔名等可判別的 05/23 17:25
realmeat:讀檔時就先encoding成utf8, 反正ansi是utf8的子集 05/23 17:53
adrianshum:ASCII 才是 UTF8的子集,ANSI 並不是 encoding... 05/23 22:19
realmeat:我直接轉換成ascii...XD 05/23 22:20
adrianshum:原po請釐清你口中所謂 ANSI 指的是什麼 05/23 22:22
realmeat:其實突然間我也很想知道 ansi是啥? XDXD 05/23 22:23
swpoker:之前處理編碼都要用位元來處理絕對不明編碼的串流 05/24 08:58
henry035:我說的 ANSI 是指 XP 記事本的編碼格式 05/24 14:28
henry035:不好意思,對編碼不是很熟。 對 M$ 的處理方式更是困惑 05/24 14:49
henry035:像記事本就會在 UTF8 的文件塞 illegal character \65279 05/24 14:51
henry035:swpoker大,沒有規則耶,甚至同一份文件可能存在兩種格式 05/24 14:53
※ 編輯: henry035 來自: 163.14.67.11 (05/24 14:53)
swpoker:對於如何產生該份文件感到不可思議,那分行0d 0a or 0d? 05/24 14:59
adrianshum:樓上:分行只因平台而有別,編碼沒影響 05/24 22:39
realmeat:後來查到ANSI也是encoding , 比ASCII大一點點而已 05/24 23:56