2016-05-12 122 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”))

相关问题