本文介紹了如何修復Java args無法從Windows資源管理器中正確獲取字符串中的日語字符?的處理方法,對大家解決問題具有一定的參考價值,需要的朋友們下面隨著小編來一起學習吧!
問題描述
在Windows 10上,我在";SendTo";目錄中有一個快捷方式文件。它是.BAT文件的快捷方式。
在.bat文件中只能有命令"python <filepath> %*"
或"java -jar <filepath> %*"
。
當我從Windows資源管理器中選擇并右鍵單擊文件并將其發(fā)送到此快捷方式文件時,它將使用所選文件作為參數(shù)從<filepath>
運行程序。
我正在嘗試發(fā)送文件名包含日語字符作為參數(shù)的文件。文件名會很好地傳遞給Python程序,但對于Java程序,文件名的ARG會混亂,并且Java程序找不到該文件。
例如,在Java和地區(qū)為日本的情況下,Filename ファイル名.txt
的文件名在參數(shù)中變?yōu)?code>Filename 繝輔ぃ繧?繝?蜷?.txt。其他區(qū)域設置也不起作用。如果我先將args發(fā)送到python,然后再從python發(fā)送到Java,結果是一樣的。
如何使Java獲得正確的文件名或可以正確地找到文件?
推薦答案
您遇到了一個未解決的Java問題。請參閱開放錯誤JDK-8124977 cmdline encoding challenges on Windows,該錯誤合并了幾個與從命令行向Java應用程序傳遞Unicode參數(shù)相關的問題。
Java 18(將于下個月發(fā)布)通過實現(xiàn)JEP 400: UTF-8 by Default解決了一些UTF-8問題,但不幸的是,具體不是您的問題。來自JEP400的目標和目標:
在整個標準Java API中使用UTF-8進行標準化,除了控制臺I/O。[強調我的]
但是,有一種解決方法。參見Netbeans Chinese characters in java project properties run arguments,特別是this answer,它成功地處理了使用JNA(Java Native Access)作為命令行參數(shù)傳遞的中文字符。根據該答案:
JNA允許您從Java調用Windows API方法,而無需使用
本機代碼。因此,在Java應用程序中,您可以調用Win API方法
如GetCommandLineW()和CommandLineToArgvW()直接訪問
有關用于調用程序的命令行的詳細信息,包括
傳遞的任何參數(shù)。這兩種方法都支持Unicode。
因此該答案中的代碼不會直接讀取傳遞給main()
的參數(shù)。相反,它使用JNA調用Win API方法來訪問它們。
當該代碼處理作為參數(shù)從命令行傳遞的中文字符時,它同樣適用于日語字符,包括您的日語文件名。
這篇關于如何修復Java args無法從Windows資源管理器中正確獲取字符串中的日語字符?的文章就介紹到這了,希望我們推薦的答案對大家有所幫助,