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