使用java -jar

时间:2016-03-31 03:37:08

标签: java utf-8

我正在编写一个解析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)。

我可以做什么

  1. 在与intelliJ或
  2. 相同的环境中通过java -jar运行我的Java
  3. 修复我的代码,使其将UTF-8读入字符串

2 个答案:

答案 0 :(得分:1)

我认为这里发生的事情是您没有正确设置终端设置以进行默认编码。基本上,如果你的程序运行正常,那么它抓取UTF-8字节,将它们存储为Java字符串,然后是outputting them to the terminal in whatever the default encoding scheme。要找出您的默认编码方案,请参阅this question。然后,您需要确保运行java -jar命令的终端与之兼容。例如,请参阅我的Mac上的终端设置/首选项。

Mac Terminal Settings for UTF-8

答案 1 :(得分:0)

Oracle文档提供了关于Charset的非常简单的答案:

  

标准字符集

     

需要Java平台的每个实现来支持以下标准字符集。请参阅实现的发行文档,以了解是否支持任何其他字符集。这些可选字符集的行为可能在实现之间有所不同。

     

...

     

UTF-8

     

八位UCS转换格式

所以你应该使用new InputStreamReader(new FileInputStream(filename),"UTF-8"));