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

What is the protocol / relationship between encodings and programming languages?

作为测试我创建了一个名为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(通常)需要更多 space,所以这里不足为奇。

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

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" 存储在硬盘驱动器或内存中取决于保存文件的编码,因此编程语言必须期望始终使用特定的源文件编码吗?

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

编译器必须知道编码才能处理源代码。它是什么编译器、解释器或语言并不重要。就像人们不能只是随意使用语言文本并假设它是德语一样。

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

编程语言不关心编码。 Compiler/interpreter 确实如此。