【问题标题】:What is the protocol / relationship between encodings and programming languages?编码和编程语言之间的协议/关系是什么?
【发布时间】:2016-05-09 04:00:07
【问题描述】:

作为测试,我创建了一个名为 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?

“真实”存储在硬盘驱动器或内存中的方式取决于保存文件的编码,因此编程语言是否必须始终使用特定编码来处理源文件?

【问题讨论】:

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


    【解决方案1】:

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

    编译器必须知道编码才能处理源代码。它是什么编译器、解释器或语言都没有关系。就像人们不能只是随机选择语言文本并假设它是德语一样。

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

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

    【讨论】:

    • .class 文件是否总是 utf-8 格式?
    • @KorayTugay 提到了这一点。 Java 内部使用 UTF-16
    • 如果解释器需要处理不同编码的文件怎么办?像一个文件是 utf8 但依赖是 utf16?
    • @KorayTugay 取决于进程的含义。如果是源文件,则必须告知它们的编码是什么
    • @KorayTugay 实际上,检查过。类文件将所有内容都保存为 UTF8,只有运行时它们会保存为 UTF16
    猜你喜欢
    • 1970-01-01
    • 2010-11-13
    • 2010-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2010-10-02
    • 2021-04-20
    相关资源
    最近更新 更多