在java中读取文件时,输入前缀为两个垃圾字符

时间:2017-09-20 08:14:32

标签: java file utf-8

FileInputStream fin = new FileInputStream("D:\\testout.txt");    
BufferedInputStream bin = new BufferedInputStream(fin);    
int i;    
while((i = bin.read())!=-1) {    
    System.out.print((char)i);    
}    

bin.close();    
fin.close();    

输出:ÿþGreat

我检查了文件testout.txt,它只包含一个单词,即Great

4 个答案:

答案 0 :(得分:2)

当您使用文字时,您应该使用阅读器。例如

try(
    BufferedReader reader = Files.newBufferedReader(
        Paths.get("D:\\testout.txt"), 
        StandardCharsets.UTF_8)
    ){
    int i;    
    while((i = reader.read())!=-1) {    
        System.out.print((char)i);    
    }  
}

答案 1 :(得分:1)

这很可能是Byte order mark,可选但允许使用UTF-8字符编码的文件。一些程序(例如记事本)说明了这种可能性,有些则没有。默认情况下,Java不会删除它们。

解决此问题的一个实用程序是Apache Commons IO的BOMInputStream

此外,当您将其保存为UTF-8时,记事本将在文件中写入字节顺序标记。

答案 2 :(得分:1)

ÿþ是UTF-16中的byte order mark。您可以使用java.io将字符串转换为UTF-8,如解释here

您还可以参考answer了解更多详情。

答案 3 :(得分:0)

请使用utf-8字符编码来解决此类问题。 byte [] utf_8 = input.getBytes(" UTF-8"); //将unicode字符串转换为UTF-8 String test = new String(utf_8);