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"}都不行。
求大牛解决!

解决方案 »

  1.   


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

  2.   


    多谢,不过试了,没用,执行查看命令,返回的是三个问号"???"
    在网上查了资料(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命令的时候是不是在与外界进行交流,如果是这样的话就要指定编码格式。但是现在指定编码格式还是不管用,不知道哪里出了问题?
      

  3.   

    看下你Linux工具的编码方式,比如XShell,就看下XShell的编码方式
      

  4.   

    我的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编码,仍然不行)
      

  5.   


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

  6.   


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