【发布时间】:2016-04-27 14:12:53
【问题描述】:
所以我有这个简单的代码:
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
好吧,我对一个字符在一个字符串中占用 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 对字符串字符编码 .class 文件?
【问题讨论】:
-
这个帖子可能会有所帮助:stackoverflow.com/questions/361975/…
-
@KonstantinYovkov 它有什么关系?我的问题是关于编译时的,那个问题是关于运行时的。
-
你读得很快 :) 其中一个答案建议你可以设置默认字符编码,方法是将
JAVA_TOOL_OPTIONS环境变量设置为-DfileEncoding=UTF-32 -
osx 在哪里可以找到 JAVA_TOOL_OPTIONS?
-
可能你必须创建一个同名的环境变量并设置它的值。玩一下这个,并更仔细地研究这个
JAVA_TOOL_OPTIONS- 至少,我只是建议你可以做什么,但不知道这是否会 100% 起作用。
标签: java unicode encoding utf-8 utf-32