为什么詹金斯(Jenkins)遇到UTF 8问题

时间:2020-02-26 17:32:47

标签: java jenkins

我正在运行詹金斯的工作。我只想获取所有文件。每个文件名中都有一个中文字母。所以现在的问题是,詹金斯在读取这些文件时遇到了问题。詹金斯只说“?”出亚洲字母。第二个问题是。实际上,它有100多个文件。但是詹金斯只给了我20个文件。也许由于问号“?”,现在很多文件看起来都一样。

有人知道我该如何解决。该问题仅发生在Jenkins(在Linux上运行)上。在我的Eclipse本地计算机上,它仍然可以工作。

    File resourcePath = new File("resources/china_data/");
    File[] files = resourcePath.listFiles();

    for (final File file : files)
    {
        System.out.console(file.getName);
    }

2 个答案:

答案 0 :(得分:1)

另一种解决方案是使用新的java.nio.Path api代替java.io.File api

还请尝试在代码中首先设置以下内容。

System.setProperty("sun.jnu.encoding","utf-8");
System.setProperty("file.encoding","UTF-8");

答案 1 :(得分:0)

假设您使用的是System.out.println,则当程序以ASCII语言环境运行时会发生这种情况:

$ cat Main.java
import java.util.*;
import java.io.*;

class Main {
  public static void main(String[] args) throws Exception {
    File resourcePath = new File("resources/china_data/");
    File[] files = resourcePath.listFiles();
    for (final File file : files)
    {
      System.out.println(file.getName());
    }
  }
}

$ javac Main.java
$ LC_CTYPE=C java Main
???????

当程序从环境或通过Java配置并具有支持UTF-8的语言环境运行时,您将获得预期的结果:

$ LC_CTYPE=en_US.UTF-8 java Main
中华人民共和国

$ LC_CTYPE=C java -Dfile.encoding=UTF-8 Main
中华人民共和国

如果不确定如何配置服务器,也可以在Java中执行此操作:

System.setOut(new PrintStream(System.out, true, "UTF-8"));