【发布时间】:2016-03-22 17:46:57
【问题描述】:
我正在使用 Java 的 Runtime.getRuntime().exec(String command) 打开指定文件的 Windows 文件资源管理器。为此,我正在使用命令:
explorer pathToOpen
这几乎一直有效,除非路径包含一些在 NFD(规范化形式规范分解)规范化形式中的 unicode 字符。
让我在这里举个例子。我有以下命令:
资源管理器 C:\Test\földer
我的本地文件系统中有所有“C 盘”、“Test”和“földer”文件夹。 'földer' 包含 NFD 形式的 unicode 字符 'ö'。此外,我确保我传递给 exec 方法的字符串也包含与这些文件夹中相同的 unicode 字符,即 NFD 形式。
但这会在我的用户文件夹中打开“文档”文件夹,而不是打开“文件夹”。如果我创建另一个文件夹,让我们说“földerInNFC”,其中“ö”是 NFC 形式,那么如果我执行“explorer C:\Test\földerInNFC”,那么它会打开所需的文件夹,即“földerInNFC”。
我也可以从 Windows 命令提示符中看到相同的结果。我一一复制并粘贴了两条路径,并且可以看到相同的行为。 Here is a snippet of my command prompt。我还可以看到命令提示符无法识别 NFD 形式的“ö”,但它能够识别 NFC 形式的“ö”。
Runtime.getRuntime().exec() 和 cmd 是否都不支持 NFD unicode 字符?如果不是,那么在 java 中是否有另一种方法可以为包含 NFD 形式的 unicode 字符的特定文件或文件夹打开 Windows 文件资源管理器?
【问题讨论】:
-
这种方式不会将参数传递给可执行文件,请改用 ProcessBuilder
-
我也用过。它提供与上述相同的输出。
标签: java windows unicode unicode-normalization