Java无法通过Beta版识别Unicode字符:使用Unicode UTF-8实现全球语言支持
选项
我的用户文件夹的路径是C:\Users\Otávio Augusto Silva
,á
字符给java带来了一些麻烦。如果JDK安装在我的用户文件夹中,使用coop-install
调用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
请注意,它将< code>á字符替换为< code >γ。< br >如果使用< code>scoop install -g、< code>choco 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
要重现,请执行以下操作:
应该会出现错误。< br >我已经被困在这里好几天了,如果有人能帮助我,我将不胜感激。< br >一些相关信息:
cmd
,但PowerShell
给出了相同的错误chcp
命令给出代码 65001
使用您的目录名称(Otávio Augusto Silva
),我也可以使用Java 10在Windows 18上重现您的问题。不幸的是,这看起来像是这个开放且未解决的JDK错误中记录的更普遍和长期问题的具体示例:
JDK-4488646Java可执行文件和系统属性需要在Windows上支持Unicode
这是错误报告描述的一部分,我的重点是:
要使Java在NT上完全支持Unicode,我们需要
>
修改系统属性初始化代码以及使用 Windows 调用以在 NT 上使用宽字符调用的所有其他位置。
修改java、javac等以便能够在类路径和其他命令行参数中使用Unicode。
那个错误报告是2001年创建的!它与Windows NT有关,但由于它仍然是开放的且未解决,我认为它对所有版本的Windows都具有普遍适用性,包括Windows 10和11。
注意事项:
>
尽管这无助于解决您的特定问题,但使用JNA在Java应用html" target="_blank">程序(如上面的错误描述中所述)中“使用宽字符调用”非常简单。例如,如果从Java向您的应用程序传递了一个参数,那么您的代码可以成功地处理<code>Otávio Augusto Silva</code>。请参阅此SO答案,以获取执行此操作的代码。
另请参阅2015年提出的Windows上未解决的JDK错误报告JDK-8124977 cmdline编码挑战。其中包括一些关于在Windows上使用cmd和PowerShell窗口中的java
之间差异的讨论。
========================================================
(此更新基于@user16320675的评论。)
这个问题似乎已经在本月晚些时候发布的Java 19中完全解决了。从下面的屏幕截图:
>
当使用JDK19时,对javac的调用将成功。
使用JDK 18时,对javac的相同调用将失败,因为文件名D:\Otávio…
被处理为D:\Otávio…
。
我在JDK 19发行说明中找不到任何提及此修复的内容。
========================================================
(此更新显示了如果未启用beta选项会发生什么。)
如果选项< code>Beta:将Unicode UTF-8用于全球语言支持未启用,我无法重现该问题;对javac的调用在使用JDK 18和JDK 19时都能正常工作:
请注意,即使cmd窗口中的代码页是437,而不是65001,这仍然有效。当然,您的环境和我的环境之间存在一些显著差异:
总结一下如何解决这个问题:
========================================================
更新:在Java19中修复了以下错误:
8272352:当系统区域设置设置为UTF-8 #530时,Java启动器无法解析中文字符
虽然该错误修复特别与传递给 java 的文件名有关,但我认为这可能解释了为什么 Java 19 中也解决了 OP 的 javac 问题。
我创建了一个java代码来存储上传的文本文档。然后我返回该文件中的文本。所有文本均为“僧伽罗语”。UTF-8编码文本 输出直接发送到jsp页面,在那里显示为'??????????????'。 Windows 8.1、tomcat和java版本7。我已经用僧伽罗字符测试了jsp,它们正在工作。我添加了UTF-8作为内容类型。 我试过这个,这个,还有这个。
我最近尝试导入一个现有的Gradle项目,使用启动窗口中的“Open project”选项和现有的build.Gradle文件自动设置该项目。 就在我这样做之后,IntelliJ中出现了一条错误消息,说: 看起来像这样,IntelliJ抱怨我没有将play框架添加到我的PATH变量中。尽管外壳的输出告诉了某事物。其他: 我还编写了一个简单的类来显示IntelliJ使用的PATH变量: 当我运行这个
问题内容: 我在Windows 2012服务器上使用PowerShell,我从System32删除了所有Java命令,重新安装了jdk,将JAVA_HOME和Path设置为指向新安装。而且我仍然收到以下错误: 问题答案: 我从System32删除了所有Java命令 这就是Windows无法找到java.exe的原因。默认的JRE安装将Java放入System32目录,而CMD和Powershell
问题内容: 我正在尝试安装,但正在运行return 在使用各种软件包之前,这种情况会持续一段时间,然后再返回其他任何内容。给我: 如何安装?在github页面的自述文件中使用了(而不是)。我的Go版本是。 问题答案: 这些问题与无效有关。 我认为您已安装Go in 。 因此,将您的路径更改为的值。 看来您的工作空间(GOPATH)位于。 这可能会解决您的问题。 将此添加到bash配置文件的底部,位
伙计们,我不能在命令行编译或运行我的任何程序。我在路径中设置了的位置,但这没有任何作用。还有其他的修复吗? 我的路是这样的: C:\程序文件(x86)\Java\JRE1.8.0_40\bin;C:\ProgramData\Oracle\Java\JavaPath;C:\程序文件(x86)\nVidia Corporation\PhysX\common;C:\Windows\System32;C:
我安装了Java JDK,然后在高级设置中设置了系统环境的路径,但在命令提示符中仍然无法识别。。 这是截图