0

作爲測試我創建了一個稱爲Hello.java文件和內容如下:編碼和編程語言之間的協議/關係是什麼?

public class Hello{ 
    public static void main(String[] args){ 
     System.out.println("Hello world!"); 
    } 
} 

我保存的這個文件有UTF-8編碼

無論如何,編譯和運行問題是沒有問題的。該文件是103字節長。

然後我保存的文件與UTF-16編碼。這一次的文件是206字節長,因爲以及UTF-16(通常)需要更多的空間,所以這裏沒有什麼驚喜。

試圖編譯從我的終端的文件,我得到了所有這些錯誤:

Hello.java:4: error: illegal character: '\u0000' 
    } 
    ^

所以確實只能用UTF-8編碼的源文件javac的工作?這就像一個標準?

javac -version 
javac 1.8.0_45 

此外,我只知道Java,但可以說你正在運行Python代碼或任何解釋性編程語言。 (對不起,如果我誤解了Python是否被解釋,如果它不是..)編碼會是一個問題嗎?如果不是,它會對性能產生什麼影響?

好了,所以字「真」是保留關鍵字(對於給定的編程語言..),但在什麼編碼它保留? ASCII - 僅限UTF-8?

如何「真」被保存在硬盤或內存取決於文件保存在編碼,因此必須在編程語言的期望總是與源文件的特定編碼工作?

回答

1

關於javac,你可以用-encoding參數設置編碼。內部Java以UTF-16處理字符串,以便編譯器將所有內容都轉換爲該字符串。

編譯器必須知道的編碼,因此它可以處理源代碼。它與編譯器,解釋器或語言無關。就像人們不能隨意使用隨機文本並假設它是德語一樣。

關鍵字不保留任何特定的編碼。他們是關鍵字。不管你使用什麼編碼,你都不可能有兩種寫單個單詞的方式。這些話是一樣的。

編程語言不關心編碼。 編譯器/解釋器確實。

+0

.class文件是否總是utf-8? –

+0

@KorayTugay補充說明。 Java在內部使用UTF-16 –

+0

如果解釋器需要使用不同的編碼處理文件,該怎麼辦?像一個文件是utf8,但依賴項是utf16? –