从主机系统和Docker容器读取文本文件会产生不同的结果

时间:2019-10-21 09:56:43

标签: java docker encoding

我想在docker容器中运行的应用程序中逐行读取文本文件。该文件包含其他一些文件的路径,我想弄乱这些文件。

由于vb6程序也读取该文件,因此需要将其编码为ISO-8859-1。

当我在docker主机(ubuntu 18.04.3)上读取文件时,一切正常。但是当我在docker容器中读取它时,特殊字符无法正确读取。

这是我的代码:

String n = "/foo/bar.txt";
List<String> lines = Files.readAllLines(Paths.get(n),StandardCharsets.ISO_8859_1);
for(String line : lines) {
    File[] directories = new File(line).listFiles(File::isDirectory);
}

在我的主机上,directories已正确填充,但在docker容器内部为null

我确定问题是特殊字符ä。当我打印出字节时,在主机上是-61 -92,而在容器内是63

该容器源自amazoncoretto:8,

我希望有人能提供帮助。

1 个答案:

答案 0 :(得分:0)

因此,在发现了一些疑虑之后,docker容器的标准Charset被设置为ASCII,我不知道为什么。

所以我要做的就是使用
java -Dfile.encoding=UTF-8 MainClass

在程序启动时为java设置默认编码。
相关问题