2016-05-12 117 views
0

我初始化以這種方式掃描儀類對象:爲什麼程序不能使用Scanner讀取UTF-8字符?

Scanner scanner = new Scanner(new File("data.txt"),"utf-8"); 

當我嘗試讀取像C或E,scanner.hasNextLine()返回false字符的文件時,掃描儀不讀什麼。

我試着用「iso-8859-1」。和文件閱讀成功。但文件是UTF-8文件,像'ç'這樣的字符顯示爲「ç」。

請幫我解決問題,並讓程序正確讀取並顯示UTF-8字符。

+0

請提供[mcve] include *字節*在該文件中。 –

+0

你怎麼知道你的文件被正確編碼爲UTF-8? –

+0

我不知道你使用哪個操作系統,但試圖用這種方法檢查https://www.chainsawonatireswing.com/2012/04/22/how-can-you-tell-if-a-file-is-utf -8-encoded-or-not //?from = @ –

回答

0

指定編碼,同時寫UTF-8編碼的文本

new String(scanner.next().getBytes(), Charset.forName("UTF-8")) 

要獲得完整產品線,在掃描儀指定分隔符

scanner.useDelimiter("\n"); 
+0

scanner.next()已經返回一個字符串,爲什麼我們需要這樣做? –

+0

來自docs通過使用指定的字符集解碼指定的字節數組來構造一個新的字符串。 – Saravana

+0

您將字符串轉換爲字符串,它沒有任何意義。此外,你不這樣做,因爲getBytes()使用默認編碼,所以假設它是ISO-8858-1,它將序列化ISO-8859-1中的字符串,然後以UTF-8反序列化結果,簡單地工作 –

0

用途:

新的String(scanner.next() .getBytes(「UTF-8」),Charset.forName(「UTF-8」))

相關問題