作者henry035 (Rex)
看板java
標題[問題] 讀檔不完整 (ANSI 文字檔)
時間Thu May 23 09:13:43 2013
環境: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
1F:推 PsMonkey:不設定 charset 這樣沒問題嗎? 05/23 10:03
2F:推 AzureCoder:有沖廁(flush)嗎 05/23 11:05
3F:推 PsMonkey:應該不是 flush 的問題吧? 他中途就斷了 05/23 11:22
4F:→ realmeat:我覺得是encoding的問題 05/23 11:51
5F:→ swpoker:就是編碼啦ansi就是ms系統預設的ms950拉 05/23 15:13
6F:→ henry035:因為同時會讀到 ANSI、UTF-8 兩種格式的檔案,怎麼處理 05/23 16:51
7F:→ henry035:比較好呢? 謝謝。 05/23 16:53
8F:→ swpoker:沒有規則嗎~例如從目錄/檔名等可判別的 05/23 17:25
9F:→ realmeat:讀檔時就先encoding成utf8, 反正ansi是utf8的子集 05/23 17:53
10F:→ adrianshum:ASCII 才是 UTF8的子集,ANSI 並不是 encoding... 05/23 22:19
11F:→ realmeat:我直接轉換成ascii...XD 05/23 22:20
12F:→ adrianshum:原po請釐清你口中所謂 ANSI 指的是什麼 05/23 22:22
13F:→ realmeat:其實突然間我也很想知道 ansi是啥? XDXD 05/23 22:23
14F:→ swpoker:之前處理編碼都要用位元來處理絕對不明編碼的串流 05/24 08:58
15F:→ henry035:我說的 ANSI 是指 XP 記事本的編碼格式 05/24 14:28
16F:→ henry035:不好意思,對編碼不是很熟。 對 M$ 的處理方式更是困惑 05/24 14:49
17F:→ henry035:像記事本就會在 UTF8 的文件塞 illegal character \65279 05/24 14:51
18F:→ henry035:swpoker大,沒有規則耶,甚至同一份文件可能存在兩種格式 05/24 14:53
※ 編輯: henry035 來自: 163.14.67.11 (05/24 14:53)
19F:→ swpoker:對於如何產生該份文件感到不可思議,那分行0d 0a or 0d? 05/24 14:59
20F:→ adrianshum:樓上:分行只因平台而有別,編碼沒影響 05/24 22:39
21F:→ realmeat:後來查到ANSI也是encoding , 比ASCII大一點點而已 05/24 23:56