作者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