使用java读取unicode文本文件

时间:2009-06-11 08:16:12

标签: java string unicode ascii

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

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

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

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

但是有没有办法将Reader包装在'Converter'中?

编辑:文件以FF FE开头

7 个答案:

答案 0 :(得分:15)

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

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

答案 1 :(得分:8)

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

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

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

答案 2 :(得分:7)

一些注意事项:

  • “UTF-16”编码可以读取标有BOM的小端或大端编码文件;请参阅here以获取Java 6编码列表;没有明确说明在使用“UTF-16”编写时会使用什么字节顺序 - 它似乎是大端的 - 因此您可能希望在保存数据时使用“UnicodeLittle”
  • 使用String类编码/解码方法时要小心,特别是使用标记的可变宽度编码,如UTF-16 - use them only on whole data
  • 正如其他人所说,通常最好通过将 InputStream 包裹在InputStreamReader来读取字符数据;您可以concatenate your input使用StringBuilder或类似的缓冲区{{3}}进入单个字符串。

答案 3 :(得分:1)

我建议您使用Google Data API中的UnicodeReader,有关类似问题,请参阅this answer。它将自动检测字节顺序标记(BOM)中的编码。

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

答案 4 :(得分:0)

我只需要在InputStreamReader的创建中添加“ UTF-8”,就可以立即看到特殊字符。

InputStreamReader istreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(istreamReader);

答案 5 :(得分:-1)

 Scanner scan = new Scanner(new File("C:\\Users\\daniel\\Desktop\\Corpus.txt"));
   while(scan.hasNext()){

   System.out.println(scan.nextLine());
    }

答案 6 :(得分:-1)

String s = new String(Files.readAllBytes(Paths.get("file.txt")),"UTF-8");