java - Process.getInputStream() 使用哪种编码?

标签 java character-encoding

在 Java 程序中,我通过 ProcessBuilder 生成了一个新的 Process

args[0] = directory.getAbsolutePath() + File.separator + program;
ProcessBuilder pb = new ProcessBuilder(args);
pb.directory(directory);
final Process process = pb.start();

然后,我用一个新的线程读取进程标准输出

new Thread() {
    public void run() {
        BufferedReader reader = new BufferedReader(
            new InputStreamReader(process.getInputStream()));
        String line = "";
        while ((line = reader.readLine()) != null) {
            System.out.println(line);
    }
}.start();

但是,当进程输出非ASCII字符(如'é')时,有字符'\uFFFD'相反。

getInputStream返回的InputStream中的编码是什么(我的平台是欧洲的Windows)?

我怎样才能改变一些东西,使 line 包含预期的数据(即 '\u00E9' for 'é')?

编辑:我尝试了 new InputStreamReader(...,"UTF-8"): é 变成 \uFFFD

最佳答案

InputStream 是一个二进制流,所以没有编码。当您创建 Reader 时,您需要知道使用什么字符编码,这取决于您调用的程序生成什么(Java 不会以任何方式转换它)。

如果您没有为 InputStreamReader 指定任何内容,它将使用平台默认编码,这可能不合适。有 another constructor允许您指定编码。

如果您知道要使用什么编码(并且您确实必须知道):

new InputStreamReader(process.getInputStream(), "UTF-8") // for example

关于java - Process.getInputStream() 使用哪种编码?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8398277/

相关文章:

java - 在 Spring MVC 请求处理程序中调用 Thread.currentThread().sleep(2000) 的第二个请求有什么影响?

Android Proguard 文本编码问题

java - iText编码问题

character-encoding - 如何让Protege 4.3正确显示汉字?

java - 计算 2 个相关方程的解数

java - Android使用getExternalFilesDir保存图片不一致

java - 使 JFrame 的 JPanel 大小?

java - 正则表达式与 & 符号不匹配

c# - .net 核心类库中的不同字符编码

javascript - 如何在 Javascript 函数中对 HTML 字符进行编码?