我正在编写一个解析UTF-8编码文件的项目。
我这样做
ArrayList<String> al = new ArrayList<>();
BufferedReader bufferedReader = new BufferedReader(new
InputStreamReader(new FileInputStream(filename),"UTF8"));
String line = null;
while ((line = bufferedReader.readLine()) != null)
{
al.add(line);
}
return al;
奇怪的是,当我在IntelliJ中运行它时,它正确地读取文件,但是当我通过java -jar
运行它时(它给了我垃圾值而不是UTF8)。
我可以做什么
答案 0 :(得分:1)
我认为这里发生的事情是您没有正确设置终端设置以进行默认编码。基本上,如果你的程序运行正常,那么它抓取UTF-8字节,将它们存储为Java字符串,然后是outputting them to the terminal in whatever the default encoding scheme。要找出您的默认编码方案,请参阅this question。然后,您需要确保运行java -jar
命令的终端与之兼容。例如,请参阅我的Mac上的终端设置/首选项。
答案 1 :(得分:0)
Oracle文档提供了关于Charset的非常简单的答案:
标准字符集
需要Java平台的每个实现来支持以下标准字符集。请参阅实现的发行文档,以了解是否支持任何其他字符集。这些可选字符集的行为可能在实现之间有所不同。
...
UTF-8
八位UCS转换格式
所以你应该使用new InputStreamReader(new FileInputStream(filename),"UTF-8"));