[問題] 使用Scanner讀取utf-8會中斷讀取

看板java作者 (Bacon)時間8年前 (2016/06/27 00:54), 8年前編輯推噓3(3010)
留言13則, 7人參與, 最新討論串1/1
各位大大好,小弟最近在寫一隻程式,必須要讀入utf-8的log資料 上面主要記錄了許多使用者的ID,而玩家來自各國,所以有各種語言 其中會遇到一些ID,使用記事本看會看到亂碼,用Notepad則會看到 一組編碼,例如xE4這樣,例如會有一個ID像這樣 SchxE4llbchen 小弟我原本是想讀到亂碼時,寫個特例處理掉,但是Scanner讀取卻 可能早在讀到那一個亂碼之前好幾10行,就顯示 hasNext() = false了 可是如果手動用文字編輯器去把那個亂碼刪掉,又可以完整讀完整個檔案 這讓我無法針對他去做處理,請問各位大大,該如何處理呢? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 123.241.138.246 ※ 文章網址: https://www.ptt.cc/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

06/27 01:37, , 1F
所以你的hasNext()=false 是為什麼? 那才是重點吧?
06/27 01:37, 1F
對啊,就是不知道為什麼早在讀到那行有亂碼的之前好幾行,就已經沒有可以讀了 才覺得奇怪,用Notepad把那個亂碼刪掉的話,就可以完整讀完 ※ 編輯: baconcsie (123.241.138.246), 06/27/2016 01:47:55 ※ 編輯: baconcsie (123.241.138.246), 06/27/2016 01:49:05

06/27 02:43, , 2F
換成Reader試試如何呢?
06/27 02:43, 2F

06/27 03:14, , 3F
根據 https://goo.gl/CF5ppf hasNext吃到一堆東西都會停
06/27 03:14, 3F

06/27 03:21, , 4F
等等 你 scanner 是餵 BufferedReader 給它吃的嗎
06/27 03:21, 4F

06/27 03:25, , 5F
猜測scanner底層讀進buffer時遇到就先掛點?才造成會
06/27 03:25, 5F

06/27 03:25, , 6F
是死在前幾行。純猜測,還是要run debug去抓吧
06/27 03:25, 6F

06/27 08:34, , 7F
Scanner會做很多判斷 很容易因為亂碼停止 用底層一點的Buf
06/27 08:34, 7F

06/27 08:34, , 8F
feredReader或是新的API的Files.lines吧
06/27 08:34, 8F

06/27 08:34, , 9F
或是解決會存入亂碼的原因呢?
06/27 08:34, 9F

06/27 17:22, , 10F
嗯嗯 我會改用更底層的api或其他api試試,至於來源檔
06/27 17:22, 10F

06/27 17:22, , 11F
不要有亂碼就沒法度了,那是別人的程式
06/27 17:22, 11F

06/28 17:48, , 12F
然而xE4不是亂碼.......那是變音字,德國人錯了嘛
06/28 17:48, 12F

07/29 13:55, , 13F
推 kyleJ 的作法,根據經驗 Scanner 可靠性不高
07/29 13:55, 13F
文章代碼(AID): #1NS0Yx0x (java)
文章代碼(AID): #1NS0Yx0x (java)