所以我有这个简单的代码:有没有办法在Java中编译时改变String的编码?
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文件?
大概这个线程可能会有帮助:http://stackoverflow.com/questions/361975/setting-the-default-java-character-encoding –
@KonstantinYovkov它甚至有什么关系?我的问题是编译时,这个问题是关于运行时。 –
你读得很快:)其中一个答案表明,你可以设置一个默认的字符编码,通过设置'JAVA_TOOL_OPTIONS'环境变量为'-DfileEncoding = UTF-32' –