[英]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.