How to fix Java args not getting Japanese characters properly in string from Windows Explorer?(如何修复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资源管理器中正确获取字符串中的日语字符?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
本文标题为:如何修复Java args无法从Windows资源管理器中正确获取字符串中的日语字符?


- java.lang.IllegalStateException:Bean 名称“类别"的 BindingResult 和普通目标对象都不能用作请求属性 2022-01-01
- GC_FOR_ALLOC 是否更“严重"?在调查内存使用情况时? 2022-01-01
- 转换 ldap 日期 2022-01-01
- 在 Java 中,如何将 String 转换为 char 或将 char 转换 2022-01-01
- Eclipse 的最佳 XML 编辑器 2022-01-01
- 未找到/usr/local/lib 中的库 2022-01-01
- 如何使 JFrame 背景和 JPanel 透明且仅显示图像 2022-01-01
- 将 Java Swing 桌面应用程序国际化的最佳实践是什么? 2022-01-01
- 如何指定 CORS 的响应标头? 2022-01-01
- 获取数字的最后一位 2022-01-01