使用java读取unicode文本文件

真的很简单的问题。 我需要在Java程序中读取Unicode文本文件。

我习惯使用带有BufferedReader FileReader组合的纯ASCII文本,这显然不起作用:(

我知道我可以使用Buffered Reader以“传统”方式读取字符串,然后使用以下内容进行转换:

temp = new String(temp.getBytes(), "UTF-16"); 

但有没有办法将Reader包装在’转换器’中?

编辑:文件以FF FE开头

你不会包装Reader,而是使用InputStreamReader包装流。 然后,您可以使用当前使用的BufferedReader包装它

 BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding)); 

一些说明:

  • “UTF-16”编码可以读取标有BOM的小端或大端编码文件; 在这里查看Java 6编码列表; 没有明确说明在使用“UTF-16”编写时将使用什么字节顺序 – 它似乎是大端 – 因此您可能希望在保存数据时使用“UnicodeLittle”
  • 使用String类编码/解码方法时要小心,特别是使用标记的可变宽度编码(如UTF-16) – 仅在整个数据上使用它们
  • 正如其他人所说,通常最好通过使用InputStreamReader包装InputStream来读取字符数据; 您可以使用StringBuilder或类似的缓冲区将输入连接成单个String。

查看http://java.sun.com/j2se/1.4.2/docs/api/java/io/InputStreamReader.html

我会用以下内容读取源文件:

 Reader in = new InputStreamReader(new FileInputStream("file"), "UTF-8")); 

我建议使用Google Data API中的UnicodeReader,请参阅此答案以获得类似的问题。 它将自动检测字节顺序标记(BOM)中的编码。

您也可以考虑Apache Commons IO中的BOMInputStream ,它基本相同,但不包括所有替代版本的BOM。

  Scanner scan = new Scanner(new File("C:\\Users\\daniel\\Desktop\\Corpus.txt")); while(scan.hasNext()){ System.out.println(scan.nextLine()); } 
 String s = new String(Files.readAllBytes(Paths.get("file.txt")),"UTF-8");