2012-04-18 100 views
0

我试图从系统控制台读取流程,但是我在编码方面存在一些问题。 因为我是法国人,所以我的键盘有一些特殊的字符,例如'é','è','à'等等......Java - 编码字符串

当我把控制台的内容放到一个文本区域时,这样的事情:

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 

它automaticaly取代特殊字符的'?'而且尺寸也有问题。

我读的控制台类似的内容:缓冲区是通过套接字发送

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");); 

所以,任何人都可以告诉我为什么我的编码有这个问题?

谢谢。

+1

这可能是相关的:http://stackoverflow.com/questions/2914069/how-to-add-diffrent-characterset-support-for- jtextarea – mcfinnigan 2012-04-18 09:39:43

回答

1

如果你是在Windows上做的,你应该忘记这一点。默认的命令行编码ist CP850是废话。您可以更改该会话,但不能调用任何批处理文件。

尝试chcp 65001

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

+0

即使您使用chcp 65001将代码页更改为UTF-8,控制台也可能无法正确显示UTF-8。请参阅http://stackoverflow.com/questions/10143998/cyrillic-in-windows-consolejava-system-out-println/10147081#10147081 – dragon66 2012-04-18 13:14:45

+0

可惜,Windows控制台是纯粹的废话。 – 2012-04-18 19:24:12

0

在某些情况下,这种功能将是很好:

System.out.println(String.format(Locale.UK, <your String value>, args));