Java: Runtime.getRuntime().exec()在不应该的情况下传递Unicode参数

5

我最好通过一个例子来解释我的问题: 在一个尚未使用Unicode模式而是使用ISO-8859-15的Linux系统上运行以下程序。环境设置如下:LC_CTYPE=de_DE@euro

import java.io.*;
import java.util.*;

public class UnicodeTest {
    public static void main(String[] args) throws Exception {
            Runtime.getRuntime().exec(new String[] { "foobar", "äöü" });
    }
}

当我使用命令行编译并运行这个程序时,使用javacfoobar正确地接收了äöü参数,使用的是ISO-8859-1编码。但是当从Netbeans运行同一个程序时,传递的参数变成了Unicode编码,从而使得被调用程序无法使用。在Tomcat中调用该方法时也会出现相同的情况。Java使用哪个设置或环境变量来确定如何在Runtime.exec()中传递参数?

“when it shouldn't” - 这不是多余的吗。你会想要让它错误地通过测试吗。 ;) 你有检查过Netbeans如何保存你的文件吗?Netbeans使用javac进行编译,所以应该是相同的编译器。 - Peter Lawrey
Peter:谢谢,我已经更正了标题。我会检查一下Netbeans是否创建了相同的类文件,我猜它应该是这样的。 - Erich Kitzmueller
已经检查过了。从Netbeans运行会产生错误的结果。在命令行中运行相同的类文件(由Netbeans构建)会产生正确的结果。 - Erich Kitzmueller
1个回答

1
找到了。该行为由系统属性file.encoding控制。Netbeans将其设置为UTF-8。在命令行中,它是ISO-8859-15

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接