0

我正在尝试从系统控制台读取流程,但我遇到了一些编码问题。由于我是法国人,我的键盘有一些特殊字符,例如“é”、“è”、“à”等...

当我将控制台的内容放入文本区域时,我得到了类似的东西:

Le volume dans le lecteur C s'appelle DisqueC
Le num?ro de s?rie du volume est CE7........
3 fichier(s)           20?229 octets
5 R?p(s)  450?096?623?616 octets libres

它会自动将特殊字符替换为“?” 而且尺寸也有问题。

我这样阅读控制台的内容:

BufferedReader stdInput = new BufferedReader(new InputStreamReader(child.getInputStream(), "UTF-8"));
BufferedReader stdError = new BufferedReader(new InputStreamReader(child.getErrorStream(), "UTF-8"));

String line;
byte[] lineBytes;
while ((line = stdInput.readLine()) != null)
{
    lineBytes = line.getBytes("UTF-8");
    buffer.append("\t\t" + new String(lineBytes, "UTF-8") + "\n");
}
stdInput.close();
while ((line = stdError.readLine()) != null)
{
lineBytes = line.getBytes("UTF-8");
buffer.append("\t\t" + new String(lineBytes, "UTF-8") + "\n");
}
stdError.close();

然后缓冲区通过套接字发送,我将其显示到 jTextArea 中:

textArea.append(new String(console_output.getBytes(), "UTF-8"););

那么,谁能告诉我为什么我有这个编码问题?

谢谢。

4

2 回答 2

1

如果您在 Windows 上执行此操作,则应该忘记这一点。默认的命令行编码是 CP850,这是废话。您可以为会话更改它,但您将无法调用任何批处理文件。

尝试chcp 65001

这将切换到 UTF-8。检查这个StackOveflow 搜索

于 2012-04-18T09:39:27.480 回答
0

在某些情况下,这个功能会很好:

System.out.println(String.format(Locale.UK, <your String value>, args));
于 2014-02-26T12:48:18.477 回答