真正的简单问题。我需要在Java程序中读取Unicode文本文件。
我习惯使用带有BufferedReader FileReader组合的纯ASCII文本,这显然不起作用:(
我知道我可以使用Buffered Reader以“传统”方式读取字符串,然后使用以下内容进行转换:
temp = new String(temp.getBytes(), "UTF-16");
但是有没有办法将Reader包装在'Converter'中?
编辑:文件以FF FE开头
答案 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)
一些注意事项:
答案 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");