gpt4 book ai didi

java - 无论如何要在 Java 中为编译时更改 String 的编码?

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:39:59 27 4
gpt4 key购买 nike

所以我有这个简单的代码:

public class FooBar {
public static void main(String[] args) {
String foo = "ğ";
System.out.println(foo.getBytes().length);
}
}

然后让我编译并运行它:

$ javac FooBar.java
$ java -Dfile.encoding=UTF-32 FooBar
4

好吧,一个字符在一个String中占用4个字节我并不奇怪,因为我告诉Java在运行程序时要使用UTF-32编码。

让我们尝试使用 UTF-8 编码运行程序:

$ java -Dfile.encoding=UTF-8 FooBar
2

一切似乎都很好。

目前类文件 (FooBar.class) 是 451 字节。我将这样更改代码:

public class FooBar {
public static void main(String[] args) {
String foo = "ğğ";
System.out.println(foo.getBytes().length);
}
}

再次编译,看到我盘中的文件长度为:453字节

很明显,文件本身是以UTF-8编码存储在磁盘中的。如果我现在使用 UTF-32 编码运行这个 .class 文件:

$ java -Dfile.encoding=UTF-32 FooBar
8

一切看起来都很好,但是,有没有告诉编译器使用 UTF-32 对 String 字符编码 .class 文件?

最佳答案

系统属性 file.encoding 确定默认字符集,但不被编译器使用。

Java 类文件有一个已定义的二进制数据结构,不能更改(除非您编写自己的编译器和类加载器)。

因此字符串在常量池中的编码总是modified UTF-8 .

关于java - 无论如何要在 Java 中为编译时更改 String 的编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34921954/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com