Я искал это и нашел много информации о параметрах file.encoding и sun.jnu.encoding и переменной среды "LANG", но в конце концов мне не удалось найти решение. Поэтому я подробно обсудил это с ChatGPT
Код: Выделить всё
import java.io.File;
import java.io.IOException;
import java.util.stream.Collectors;
public class CodesetTest
{
public static void main(String[] args) {
System.out.println(System.getProperty("file.encoding"));
System.out.println(System.getProperty("sun.jnu.encoding"));
System.out.println(System.getenv("LANG"));
System.out.println(System.getenv("JAVA_TOOL_OPTIONS"));
System.setProperty("file.encoding", "UTF-8");
System.setProperty("sun.jnu.encoding", "UTF-8");
System.out.println("Properties changed!");
System.out.println(System.getProperty("file.encoding"));
System.out.println(System.getProperty("sun.jnu.encoding"));
if (args.length == 0) {
String filePath = "C:/temp/示例.txt";
ProcessBuilder processBuilder = new ProcessBuilder(
"java",
"-Dfile.encoding=UTF-8",
"-Dsun.jnu.encoding=UTF-8",
"-cp", System.getProperty("java.class.path"),
CodesetTest.class.getName(),
filePath
).inheritIO();
processBuilder.environment().put("LANG", "en_US.UTF-8");
processBuilder.directory(new File("C:/temp"));
try {
Process process = processBuilder.start();
System.out.println("Started new process: " + processBuilder.command().stream().collect(Collectors.joining(", ")));
int retVal = process.waitFor();
System.out.println("Result: " + retVal);
} catch (IOException e) {
e.printStackTrace();
}
catch (InterruptedException e)
{
e.printStackTrace();
}
} else {
System.out.println("File path received: " + args[0]);
}
}
}
Код: Выделить всё
UTF-8
Cp1252
en_US.UTF-8
null
Properties changed!
UTF-8
UTF-8
Started new process: java, -Dfile.encoding=UTF-8, -Dsun.jnu.encoding=UTF-8, -cp, C:\Users\MRE\workspaces\pdtt\TestProject\bin, CodesetTest, C:/temp/示例.txt
UTF-8
UTF-8
en_US.UTF-8
null
Properties changed!
UTF-8
UTF-8
File path received: C:/temp/??.txt
Result: 0
Теперь я немного растерян, и у меня закончились идеи. По сути, моя цель состоит в том, чтобы, независимо от системных настроек и места расположения компьютера, поддерживать передачу в мое приложение-импортер путей к файлам, которые содержат символы Юникода, подобные этим китайским. Может ли кто-нибудь объяснить, что я делаю неправильно или в чем проблема, которая мешает этому работать? Любые предложения или рекомендации, как альтернативно достичь этой цели? Любая помощь очень ценится!
Подробнее здесь: https://stackoverflow.com/questions/790 ... -can-i-avo
Мобильная версия