iteye_12606 2009-12-25 12:18
浏览 323
已采纳

java 程序调用Unix/Linux 中的Shell,然后shell中含中文名的问题

各路好手,小弟项目中遇到如下问题,急需各位大侠出手相助,现将问题描述如下:
小弟的项目是用Java开发的,IDE是 Mac OS 下的 Eclipse(Linux/Unix下也是相同的问题)。程序中需调用系统的 shell 命令,例如:

String line;
String[] cmd = new String[3];
cmd[0] = "/bin/sh";
cmd[1] = "-c";
cmd[2] = "du -sh /Users/测试"

Process proc = Runtime.getRuntime.exec(cmd);
InputStreamReader is = new InputStreamReader(proc.getInputStream());
BufferedReader br = new BufferedReader (is);
while ((line = br.readLine ()) != null) {
System.out.println(line);
}

du 命令是用来读取文件大小的shell命令,本程序需要读取“/Users/测试”这个文件夹的大小。现在问题来了,源程序没有经过打包,直接在Eclipse中点击Run按钮,这样是可以直接显示正确结果的,如“123M /Users/测试”这种形式,但是打包成jar包时,shell命令就不识别中文名了,也就无法执行du命令。打开终端,在命令行下键入 “du -sh /Users/测试”也是可以显示正确结果。所以小弟想应该是Shell的环境变量设置有问题。请问,应该如何在程序中设置shell的环境变量,确保打包后的程序能正常调用含中文参数的shell命令。
请各路好手出手相助!
问题补充
To zhoun:
我在命令行执行echo $LANG结果是zh_CN.UTF-8;所以按照你写的执行了一下,结果报“java.io.IOException: LANG=zh_CN.UTF-8: not found”异常。
问题补充:
To Ihavegotyou:
多谢你的回答,呵呵。
不过小弟仅仅是拿 du 命令作为一个例子,使用其他Linux/Unix命令的时候,对于中文参数,还是会面临一样的问题的。
问题补充:
多谢您的回答。目前问题已解决。我将程序拿出来,在命令行下制定字符集进行编译如: javac -encoding UTF-8 test.java 然后运行的时候也是指定相同字符集 java -Dfile.encoding=UTF-8 ... 这样就能正常运行了。所以问题就是,双击可运行jar包时,调用的字符集和原先编译的字符集不一样。
  • 写回答

3条回答 默认 最新

  • xxxxxxxxxxxxxxxxx 2009-12-28 13:10
    关注

    echo "测试" | native2ascii
    \u6d4b\u8bd5

    cmd[2] = "du -sh /tmp/\u6d4b\u8bd5" ;

    这样看看?

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(2条)

报告相同问题?

悬赏问题

  • ¥15 关于#python#的问题:求帮写python代码
  • ¥20 MATLAB画图图形出现上下震荡的线条
  • ¥15 LiBeAs的带隙等于0.997eV,计算阴离子的N和P
  • ¥15 关于#windows#的问题:怎么用WIN 11系统的电脑 克隆WIN NT3.51-4.0系统的硬盘
  • ¥15 来真人,不要ai!matlab有关常微分方程的问题求解决,
  • ¥15 perl MISA分析p3_in脚本出错
  • ¥15 k8s部署jupyterlab,jupyterlab保存不了文件
  • ¥15 ubuntu虚拟机打包apk错误
  • ¥199 rust编程架构设计的方案 有偿
  • ¥15 回答4f系统的像差计算