1

我只是想测试 Java Unicode 支持。我发现 Java 在其类名中支持 Unicode 字符。但是当我尝试使用 Unicode 字体时它没有编译。下面是代码

带有 Unicode 字符的 Java 类名

它在编译期间抛出以下错误

编译时出错

File 和 Eclipse 工作区的字符集是 UTF-8。

更新:这里是来源。这有 Unicode 泰米尔语字母

public class தமிழ் {

    private static String வணக்கம் = "வணக்கம்";

    public static void main(String[] args) {
        // TODO Auto-generated method stub
        வணக்கம்சொல்();
    }

    private static void வணக்கம்சொல்() {
        System.out.println(வணக்கம் + " வருக! வருக!!");
    }
}
4

2 回答 2

2

关于类名中的 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 上运行(我无法验证,没有)

于 2018-04-06T12:41:46.827 回答
0

这是一个问题:

  • Unicode文本规范化ĉ可以是一个 Unicode 代码点(符号)或两个c和一个组合变音符号^(零宽度)。操作系统使用其中之一。理想情况下,IDE 应该强制执行规范形式。(不知道。)
  • Windows 命令行 cmd.exe仅限于其系统编码。但是,您可以有一个纯 ASCII 主类,调用您的类的主类。
  • 具有 ASCII 名称的可执行 jar文件也应该没有问题。MANIFEST.MF 已经在 UTF-8 中,但由于行长不应超过 72 个字节,并且 UTF-8 是每个字符多字节,所以要小心。

  • 然后是版本控制系统会产生问题。特别是尝试在 Windows 和 Linux 之间切换。

于 2018-04-09T06:52:18.200 回答