[英]How to enter UTF-8 characters inside a jar file using Scanner(System.in)
我有一个 java 项目,我想在其中接受用户的输入。
我在 eclipse 中编写了代码,它运行起来完全没有任何问题。
However, when I export my classes into an executable-jar file using eclipse and try to run it in the windows cmd, the Scanner(System.in)
can't read charachters in UTF-8 (greek characters) or something else that i haven'没想过。
这是我遇到问题的代码部分:
String yesORno = inp.stringScanner(); // basically a nextLine()
while (!(yesORno.equals("ΝΑΙ") || yesORno.equals("ΟΧΙ"))) { // ΝΑΙ and OXI are greek characters not latin
System.out.println("Παρακαλώ πληκτρολογίστε 'ΝΑΙ' ή 'ΟΧΙ'"); // please type ΝΑΙ or ΟΧΙ in greek
yesORno = inp.stringScanner(); // take input again
}
inp 是另一个inp
的 object ,我用它来获取输入,在这种情况下使用方法stringScanner()
public String stringScanner() {
Scanner in = new Scanner(System.in);
return in.nextLine();
}
因此,当我在 eclipse 中运行代码并输入一些示例字符进行测试时,我得到:
这就是我每次都希望发生的事情。
但是当我运行 jar 文件时,我得到:
如您所见,jar 文件由于某种原因无法识别希腊语 NAI,并且yesORno.equals("ΝΑΙ")
不会返回true
以停止 while 循环。
OXI 也是如此
我尝试使用.bat
文件运行 jar 文件,例如:
start java -Dfile.encoding=UTF-8 -jar Myfile.jar
但没有解决办法。
我已经做了很多研究来解决这个问题,但我什么也没找到。
我会很感激你的帮助
JVM 参数-Dfile.encoding
告诉 JVM 它可能遇到的(文本)文件的默认编码是什么。 这包括stdin
、 stdout
和stderr
- 映射到System.in
、 System.out
和System.err
。 但是这个论点不会改变操作系统中的任何东西。
最有可能的是,您的 Windows CMD 使用的是 Windows-1253 编码,而不是 UTF-8。 当您使用-Dfile.encoding
参数告诉 JVM 它将是 UTF-8 时,那将是一个彻头彻尾的谎言……
Try start java -Dfile.encoding=Windows-1253 -jar Myfile.jar
or start java -Dfile.encoding=ISO-8859-7 -jar Myfile.jar
.
如果您使用 Windows-1253 设置系统,则第二个选项可能会导致其他问题,因为 ISO-8859-7 和 Windows-1253 不完全兼容。 但是对于您的测试,它应该可以完成工作。
根据文档,您使用扫描仪的方式将始终取决于操作系统的编码设置。
查看替代构造函数 - 您可以直接在那里定义编码。 您的代码可能看起来像
Scanner in = new Scanner(System.in, "UTF-8");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.