【发布时间】:2012-01-13 23:00:21
【问题描述】:
在一个 Java 程序中,我通过ProcessBuilder 生成一个新的Process。
args[0] = directory.getAbsolutePath() + File.separator + program;
ProcessBuilder pb = new ProcessBuilder(args);
pb.directory(directory);
final Process process = pb.start();
然后,我用新的Thread 读取进程标准输出
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 字符(例如 'é')时,line 将具有字符 '\uFFFD'。
getInputStream返回的InputStream中的编码是什么(我的平台是欧洲的Windows)?
如何更改内容以使line 包含预期数据(即'\u00E9' 对应'é')?
编辑:我试过new InputStreamReader(...,"UTF-8"):
é 变为 \uFFFD
【问题讨论】:
-
BufferedReader br = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
-
@Cris 如果你想回答,请写一个答案而不是评论