[問題] 讀檔不完整 (ANSI 文字檔)

看板java作者 (Rex)時間11年前 (2013/05/23 09:13), 編輯推噓3(3018)
留言21則, 6人參與, 最新討論串1/3 (看更多)
環境: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

05/23 10:03, , 1F
不設定 charset 這樣沒問題嗎?
05/23 10:03, 1F

05/23 11:05, , 2F
有沖廁(flush)嗎
05/23 11:05, 2F

05/23 11:22, , 3F
應該不是 flush 的問題吧? 他中途就斷了
05/23 11:22, 3F

05/23 11:51, , 4F
我覺得是encoding的問題
05/23 11:51, 4F

05/23 15:13, , 5F
就是編碼啦ansi就是ms系統預設的ms950拉
05/23 15:13, 5F

05/23 16:51, , 6F
因為同時會讀到 ANSI、UTF-8 兩種格式的檔案,怎麼處理
05/23 16:51, 6F

05/23 16:53, , 7F
比較好呢? 謝謝。
05/23 16:53, 7F

05/23 17:25, , 8F
沒有規則嗎~例如從目錄/檔名等可判別的
05/23 17:25, 8F

05/23 17:53, , 9F
讀檔時就先encoding成utf8, 反正ansi是utf8的子集
05/23 17:53, 9F

05/23 22:19, , 10F
ASCII 才是 UTF8的子集,ANSI 並不是 encoding...
05/23 22:19, 10F

05/23 22:20, , 11F
我直接轉換成ascii...XD
05/23 22:20, 11F

05/23 22:22, , 12F
原po請釐清你口中所謂 ANSI 指的是什麼
05/23 22:22, 12F

05/23 22:23, , 13F
其實突然間我也很想知道 ansi是啥? XDXD
05/23 22:23, 13F

05/24 08:58, , 14F
之前處理編碼都要用位元來處理絕對不明編碼的串流
05/24 08:58, 14F

05/24 14:28, , 15F
我說的 ANSI 是指 XP 記事本的編碼格式
05/24 14:28, 15F

05/24 14:49, , 16F
不好意思,對編碼不是很熟。 對 M$ 的處理方式更是困惑
05/24 14:49, 16F

05/24 14:51, , 17F
像記事本就會在 UTF8 的文件塞 illegal character \65279
05/24 14:51, 17F

05/24 14:53, , 18F
swpoker大,沒有規則耶,甚至同一份文件可能存在兩種格式
05/24 14:53, 18F
※ 編輯: henry035 來自: 163.14.67.11 (05/24 14:53)

05/24 14:59, , 19F
對於如何產生該份文件感到不可思議,那分行0d 0a or 0d?
05/24 14:59, 19F

05/24 22:39, , 20F
樓上:分行只因平台而有別,編碼沒影響
05/24 22:39, 20F

05/24 23:56, , 21F
後來查到ANSI也是encoding , 比ASCII大一點點而已
05/24 23:56, 21F
文章代碼(AID): #1HdMr9ON (java)
文章代碼(AID): #1HdMr9ON (java)