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资源管理器中正确获取字符串中的日语字符?
基础教程推荐
- 如何对 HashSet 进行排序? 2022-01-01
- 如何在不安装整个 WTP 包的情况下将 Tomcat 8 添加到 Eclipse Kepler 2022-01-01
- 如何使用 Eclipse 检查调试符号状态? 2022-01-01
- Java 中保存最后 N 个元素的大小受限队列 2022-01-01
- 在螺旋中写一个字符串 2022-01-01
- Spring Boot Freemarker从2.2.0升级失败 2022-01-01
- 首次使用 Hadoop,MapReduce Job 不运行 Reduce Phase 2022-01-01
- 如何强制对超级方法进行多态调用? 2022-01-01
- 由于对所需库 rt.jar 的限制,对类的访问限制? 2022-01-01
- 如何使用 Stream 在集合中拆分奇数和偶数以及两者的总和 2022-01-01