编码和编程语言之间的协议/关系是什么?

时间:2016-01-31 19:03:54

标签: encoding compilation language-agnostic computer-science interpreted-language

作为测试,我创建了一个名为 Hello.java 的文件,内容如下:

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

我使用 UTF-8 编码保存了此文件。

无论如何,编译和运行问题没问题。此文件长 103字节

然后我用 UTF-16 BE 编码保存了该文件。这次文件 206字节长,因为UTF-16(通常)需要更多空间,所以这里不足为奇。

尝试从我的终端编译文件,我收到了所有这些错误:

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

javac仅适用于UTF-8编码的源文件吗?这是标准吗?

javac -version
javac 1.8.0_45

另外,我只知道Java,但可以说你正在运行Python代码或任何解释性编程语言。 (对不起,如果我误以为Python被解释,如果不是......)编码是否有问题?如果没有,它会对性能有任何影响吗?

好的,所以单词“true”是一个保留的关键字(对于给定的编程语言......)但它保留了什么编码? ASCII - 仅限UTF-8?

如何将“true”存储在硬盘驱动器或内存中取决于保存文件的编码,编程语言是否必须始终使用特定的源文件编码?

1 个答案:

答案 0 :(得分:1)

关于javac,您可以使用-encoding参数设置编码。内部Java处理UTF-16中的字符串,因此编译器会将所有内容转换为该字符串。

编译器必须知道编码,以便它可以处理源代码。它与编译器,解释器或语言无关。就像人们不能随意使用语言文本并假设它是德语一样。

关键字不以任何特定编码保留。它们是关键字。无论使用何种编码,您都无法使用两种方式编写单个单词。这些话是一样的。

编程语言并不关心编码。 编译器/解释器可以。