Если вы используете 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
???????
Когда программа работает с языковым стандартом, поддерживающим UTF-8, либо из среды, либо через Java, вы получите ожидаемый результат:
$ 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"));