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? –