真正简单的问题。我需要在 Java 程序中读取 Unicode 文本文件。
我习惯于将纯 ASCII 文本与 BufferedReader FileReader 组合一起使用,这显然不起作用:(
我知道我可以使用 Buffered Reader 以“传统”方式读取字符串,然后使用以下方式对其进行转换:
temp = new String(temp.getBytes(), "UTF-16");
但是有没有办法将阅读器包装在“转换器”中?
编辑:文件以 FF FE 开头
您不会包装 Reader,而是使用 InputStreamReader 包装流。然后你可以用你当前使用的 BufferedReader 包装它
BufferedReader in = new BufferedReader(new InputStreamReader(stream, encoding));
检查https://docs.oracle.com/javase/1.5.0/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 的所有替代版本。
我只需要在 InputStreamReader 的创建中添加“UTF-8”,就可以立即看到特殊字符。
InputStreamReader istreamReader = new InputStreamReader(inputStream,"UTF-8");
BufferedReader bufferedReader = new BufferedReader(istreamReader);
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");