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

问题描述 投票:0回答:1

我想在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,

我希望有人能提供帮助。

java docker encoding
1个回答
0
投票

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

因此,我所要做的就是使用java -Dfile.encoding=UTF-8 MainClass在程序启动时设置Java的默认编码>

© www.soinside.com 2019 - 2024. All rights reserved.