gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:41:07 25 4
gpt4 key购买 nike

在 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/

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