繁体   English   中英

Java 无法识别 Windows 11 上路径中的 Unicode 字符

[英]Java doesn't recognize Unicode character in path on Windows 11

Java 无法通过Beta: Use Unicode UTF-8 for worldwide language support选项9BC9757。
我的用户文件夹的路径是C:\Users\Otávio Augusto Silva ,而á字符给 java 带来了一些麻烦。 如果使用scoop install将 JDK 安装在我的用户文件夹中,则通过调用javac命令,它会给出以下结果:

Erro: Não é possível carregar a classe principal com.sun.tools.javac.Main no módulo jdk.compiler
        java.lang.UnsatisfiedLinkError: no jimage in system library path: C:\Users\Otávio Augusto Silva\scoop\apps\zulu-jdk\current\bin

请注意,它将á字符替换为á
如果使用scoop install -gchoco install或任何 JDK 发行版中的默认安装程序全局安装,这些命令可以正常工作,但如果我调用并传递整个路径,则会出现错误:

C:\Users\Otávio Augusto Silva>javac "C:\Users\Otávio Augusto Silva\Documents\Code\Java\Hello World\main.java"
error: file not found: C:\Users\Otávio Augusto Silva\Documents\Code\Java\Hello World\main.java
Usage: javac <options> <source files>
use --help for a list of possible options

要重现,请执行以下操作:

  • 有一个带有 Unicode 拉丁字符的用户文件夹(例如áéã等)
  • 拥有Beta: Use Unicode UTF-8 for worldwide language support
  • 安装您喜欢的 JDK 发行版
  • 调用javac传递整个路径,如C:\Users\USERFOLER\PATH\TO\FILE\file.java

错误应该出现。
我已经被困了好几天了,如果有人可以帮助我,将不胜感激。
一些相关信息:

  • 我在 Windows 终端应用程序中使用cmd ,但PowerShell给出了相同的错误
  • chcp命令给出代码65001
  • 我已经尝试过这里提出的解决方案,但没有奏效

使用您的目录名称 ( Otávio Augusto Silva ),我也可以使用 Java 18 在 Windows 10 上重现您的问题。不幸的是,这看起来像是这个开放且未解决的 JDK 错误中记录的更普遍和长期存在的问题的具体示例:

JDK-4488646 Java 可执行文件和系统属性需要在 Windows 上支持 Unicode

这是错误报告描述的一部分,我强调的是:

为了使 Java 在 NT 上完全支持 Unicode,我们需要

  1. 修改系统属性初始化代码和所有其他使用 Windows 调用的地方,以便在 NT 上使用宽字符调用。

  2. 修改 java、javac 等,使其能够在 classpath 和其他命令行 arguments 中使用 Unicode

该错误报告创建于 2001 年,它与 Windows NT 相关,但由于它仍然开放且未解决,我认为它对 Windows 的所有风格具有普遍适用性。 包括 Windows 10 和 11。

笔记:

  • 尽管它无助于解决您的特定问题,但使用 JNA 在 Java 应用程序(如上面的错误描述中所述)中“使用宽字符调用”相当简单。 例如,如果将参数从 Java 传递给您的应用程序,则您的代码可以成功处理Otávio Augusto Silva 有关执行此操作的代码,请参见此 SO 答案

  • Also see open and unresolved JDK bug report JDK-8124977 cmdline encoding challenges on Windows which was raised in 2015. It includes some discussion on the differences between using java from cmd and PowerShell windows on Windows.

==================================================== ======

(此更新基于@user16320675 对问题的评论。)

看来该问题已在本月晚些时候发布的 Java 19(从此处下载)中部分解决:

  • 如果完整路径包含目录名称Otávio Augusto Silva ,对javac的调用仍将失败。 但是,请注意á字符不再引起问题。

  • 如果该目录名称缩短为Otávio ,则对javac的调用将成功。 当使用 Java 18 时,这对我来说绝对是失败的,如下面的屏幕截图所示:

    javac 路径名

在发行说明中找不到任何关于此修复的提及,但似乎问题现在仅限于 Java 19 中的长文件名。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM