簡體   English   中英

具有Unicode字符的Java類名未運行

[英]Java Classname with unicode character not Running

我只是想測試Java Unicode支持。 我發現Java在其類名中支持Unicode字符。 但是當我嘗試使用Unicode字體時,它沒有編譯。 下面是代碼

具有Unicode字符的Java類名稱

在編譯過程中它拋出以下錯誤

編譯時出錯

“文件和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(வணக்கம் + " வருக! வருக!!");
    }
}

關於類名中的Unicode字符的快速演示以及Windows上的麻煩。

創建以下Java類文件

Main.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!

即使在CMD會話中無法正確顯示和訪問文件名தமிழ்.class ,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上運行(我無法驗證,沒有一個)

這是一個問題:

  • Unicode 文本規范化ĉ可以是一個Unicode代碼點(符號)或兩個c以及一個組合的變音符號^ (零寬度)。 操作系統使用其中之一。 理想情況下,IDE應該強制執行規范形式。 (不知道。)
  • Windows命令行 cmd.exe僅限於其系統編碼。 但是,您可以有一個純ASCII主類,調用該類的主類。
  • 具有ASCII名稱的可執行jar文件也應該沒有問題。 MANIFEST.MF已經在UTF-8中,但是由於行長度不應超過72個字節,並且UTF-8每個字符為多字節,因此請小心。

  • 然后是可能會出現問題的版本控制系統 特別是嘗試在Windows和Linux之間切換。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM