关于类名中的 unicode 字符和 Windows 上的麻烦的快速演示。
创建以下 Java 类文件
主.java
class Main {
public static void main(String...args) {
\u0ba4\u0bae\u0bbf\u0bb4\u0bcd.main(new String[0]);
}
}
class \u0ba4\u0bae\u0bbf\u0bb4\u0bcd {
public static void main(String[] arrstring) {
System.out.println("\u0bb5\u0ba3\u0b95\u0bcd\u0b95\u0bae\u0bcd unicode!");
}
}
所有 unicode 字符都与 unicode 转义符号一起使用。
所以实际上遵循源代码会创建相同的类文件
class Main {
public static void main(String...args) {
தமிழ்.main(new String[0]);
}
}
class தமிழ் {
public static void main(String[] args) {
System.out.println("வணக்கம் unicode!");
}
}
编译源代码(带有 unicode 转义的那个)
javac Main.java
这将创建类文件Main.class
和தமிழ்.class
(您可以检查文件名,例如explorer .
在同一目录中)
在 CMD 控制台中,无法显示 unicode 文件名
> dir /b *.class
Main.class
?????.class
> java Main
??????? unicode!
在 ConEmu 中,文件名显示正确
> dir /b *.class
Main.class
தமிழ்.class
> java Main
??????? unicode!
即使文件名தமிழ்.class
无法在 CMD 会话中正确显示和访问,Java 也能够执行该类。这意味着该类使用 unicode 字符正确存储。但是在这两种情况下输出都被破坏了。
如果您在 Linux 机器上运行上述代码,输出将如预期的那样
$ java Main
வணக்கம் unicode!
用unicode字符编辑类可以直接在Linux上执行
$ java தமிழ்
வணக்கம் unicode!
编辑PowerShell ISE
PS > ls *.class
...
Mode LastWriteTime Length Name
---- ------------- ------ ----
-a--- 08/04/2018 12:34 317 Main.class
-a--- 08/04/2018 12:34 443 தமிழ்.class
PS > java Main
??????? unicode!
PS > java தமிழ்
java : Error: Could not find or load main class ?????
At line:1 char:1
+ java தமிழ்
编辑与 Eclipse 上的这个错误报告相关,它似乎在 Windows 10 上运行(我无法验证,没有)