作者baconcsie (Bacon)
看板java
标题[问题] 使用Scanner读取utf-8会中断读取
时间Mon Jun 27 00:54:16 2016
各位大大好,小弟最近在写一只程式,必须要读入utf-8的log资料
上面主要记录了许多使用者的ID,而玩家来自各国,所以有各种语言
其中会遇到一些ID,使用记事本看会看到乱码,用Notepad则会看到
一组编码,例如xE4这样,例如会有一个ID像这样 Sch
xE4llbchen
小弟我原本是想读到乱码时,写个特例处理掉,但是Scanner读取却
可能早在读到那一个乱码之前好几10行,就显示 hasNext() = false了
可是如果手动用文字编辑器去把那个乱码删掉,又可以完整读完整个档案
这让我无法针对他去做处理,请问各位大大,该如何处理呢?
--
※ 发信站: 批踢踢实业坊(ptt.cc), 来自: 123.241.138.246
※ 文章网址: https://webptt.com/cn.aspx?n=bbs/java/M.1466960059.A.03B.html
※ 编辑: baconcsie (123.241.138.246), 06/27/2016 00:56:39
※ 编辑: baconcsie (123.241.138.246), 06/27/2016 00:59:14
※ 编辑: baconcsie (123.241.138.246), 06/27/2016 01:06:13
1F:→ iFEELing: 所以你的hasNext()=false 是为什麽? 那才是重点吧? 06/27 01:37
对啊,就是不知道为什麽早在读到那行有乱码的之前好几行,就已经没有可以读了
才觉得奇怪,用Notepad把那个乱码删掉的话,就可以完整读完
※ 编辑: baconcsie (123.241.138.246), 06/27/2016 01:47:55
※ 编辑: baconcsie (123.241.138.246), 06/27/2016 01:49:05
2F:推 omidofor: 换成Reader试试如何呢? 06/27 02:43
4F:→ iFEELing: 等等 你 scanner 是喂 BufferedReader 给它吃的吗 06/27 03:21
5F:→ ripple0129: 猜测scanner底层读进buffer时遇到就先挂点?才造成会 06/27 03:25
6F:→ ripple0129: 是死在前几行。纯猜测,还是要run debug去抓吧 06/27 03:25
7F:推 kyleJ: Scanner会做很多判断 很容易因为乱码停止 用底层一点的Buf 06/27 08:34
8F:→ kyleJ: feredReader或是新的API的Files.lines吧 06/27 08:34
9F:→ kyleJ: 或是解决会存入乱码的原因呢? 06/27 08:34
10F:→ baconcsie: 嗯嗯 我会改用更底层的api或其他api试试,至於来源档 06/27 17:22
11F:→ baconcsie: 不要有乱码就没法度了,那是别人的程式 06/27 17:22
12F:→ Chikei: 然而xE4不是乱码.......那是变音字,德国人错了嘛 06/28 17:48
13F:推 tacovirus: 推 kyleJ 的作法,根据经验 Scanner 可靠性不高 07/29 13:55