当前位置:编程学习 > JAVA >>

Runtime.getRuntime().exec 命令里有中文,但是执行是乱码的问题

String command="cd /usr/bin; ./cli map modify_hmap --mname hmaptarget9 --comment \"备注\"";
String[] cmds = { "/bin/sh", "-c", command };
String[] envp = {"LANG=UTF-8"};
Runtime.getRuntime().exec(cmds, envp, null);

以上代码在linux环境下执行,然后查看执行结果发现调用linu的命令时,中文“备注”传进去的是乱码。
我手动输入cd /usr/bin; ./cli map modify_hmap --mname hmaptarget9 --comment "备注"
可以正确执行。
注:
我的JAVA文件编码格式是UTF-8
linux 环境的编码为:LANG="en_US.UTF-8"
我以为是envp 设置的有问题,我就将envp 改为{"LANG=UTF-8"}和{"LANG=en_US.UTF-8"}都不行。

求大牛解决!
--------------------编程问答--------------------

String[] cmds = { "/bin/sh", "-c", new String(command.getBytes(), "utf-8") };

试下这个。 --------------------编程问答--------------------
引用 1 楼 qunhao 的回复:
Java code?1String[] cmds = { "/bin/sh", "-c", new String(command.getBytes(), "utf-8") };
试下这个。


UP --------------------编程问答-------------------- windows系统都是GBK编码。 --------------------编程问答--------------------
引用 1 楼 qunhao 的回复:
Java code?1String[] cmds = { "/bin/sh", "-c", new String(command.getBytes(), "utf-8") };
试下这个。


多谢,不过试了,没用,执行查看命令,返回的是三个问号"???"
在网上查了资料(http://www.360doc.com/content/12/0420/13/9470897_205152817.shtml)
然后我个人理解的是:
new String(command.getBytes(), "utf-8")只对字符串编码再解码,解码后的字符(不管是以UTF-8进行解码还是以GBK进行解码)会转化为unicode进行存储。在jvm内部运行时也是以unicode进行表示。只是在与外界进行交流时(例如读写文件等)才进行编码转换。所以我就在想Runtime.getRuntime().exec执行linux命令的时候是不是在与外界进行交流,如果是这样的话就要指定编码格式。但是现在指定编码格式还是不管用,不知道哪里出了问题? --------------------编程问答-------------------- 看下你Linux工具的编码方式,比如XShell,就看下XShell的编码方式 --------------------编程问答-------------------- 我的Xshell编码格式是UTF-8,现在的问题是:
如果我通过Xshell执行设置命令,传入的是中文“备注”,我通过程序执行接收命令(也是用Runtime.getRuntime().exec(cmds, envp, null);),对接受到String,首先对字符串进行ISO-8859-1解码,然后再按UTF-8进行编码,最后能按中文“备注”显示出来。
但是我通过程序Runtime.getRuntime().exec(cmds, envp, null)执行设置命令时,同样的接收过程就是乱码(我试过执行设置命令之前,将命令字符串按照UTF-8解码,再按照ISO-8859-1编码,仍然不行) --------------------编程问答-------------------- 你好啊,我也遇到一样的问题,你解决了吗? --------------------编程问答--------------------
引用 7 楼 rainyj 的回复:
你好啊,我也遇到一样的问题,你解决了吗?


嗨,解决了,我是因为启动java程序的时候,在脚本里设置了运行时编码,将运行时编码改为UTF-8,以前是GBK --------------------编程问答--------------------
引用 8 楼 mrtalon 的回复:
Quote: 引用 7 楼 rainyj 的回复:

你好啊,我也遇到一样的问题,你解决了吗?


嗨,解决了,我是因为启动java程序的时候,在脚本里设置了运行时编码,将运行时编码改为UTF-8,以前是GBK

在脚本里设置了运行是编码?? 怎么设置的?
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,