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资源管理器中正确获取字符串中的日语字符?


基础教程推荐
- 无法复制:“比较方法违反了它的一般约定!" 2022-01-01
- RabbitMQ:消息保持“未确认"; 2022-01-01
- 如何对 Java Hashmap 中的值求和 2022-01-01
- 存储 20 位数字的数据类型 2022-01-01
- Struts2 URL 无法访问 2022-01-01
- 使用堆栈算法进行括号/括号匹配 2022-01-01
- 修改 void 函数的输入参数,然后读取 2022-01-01
- REST Web 服务返回 415 - 不支持的媒体类型 2022-01-01
- 问题http://apache.org/xml/features/xinclude测试日志4j 2 2022-01-01
- Spring AOP错误无法懒惰地为此建议构建thisJoinPoin 2022-09-13