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






