boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Java版 - [请教]调用外部命令编码的问题
相关主题
Help! application update issues.
如何用Java去调用一个可执行的C程序?
请教一个问题,thanks!
请问同时执行几个bat文件的问题
关于java runtime class的问题
怎么样让jar在64位JRE下运行啊?
how to use JAVA to created named pipe under windows?
help on "call a unix command in java"
java.lang.OutOfMemoryError: Java heap space in DB query
菜鸟请教个hadoop streaming job 的问题 (转载)
相关话题的讨论汇总
话题: 编码话题: exec话题: java话题: string话题: 外部命令
进入Java版参与讨论
1 (共1页)
u**d
发帖数: 211
1
在 java 程序里要掉用外部的一个 C 程序
Runtime.getRuntime().exec(cmd);
其中cmd对应一个C语言的查找程序,输入参数(即查找对象是)西欧字符串,
是 ISO-8859-1 编码
我知道在 java 里String都存储成 Unicode
但是这样调用的结果就是无法得到任何结果
我想是不是因为调用外部命令时,java还是按照 unicode 处理的,
这样的话,输入参数(西欧字符)就被强行转换,从而就不再是原来的字符
所以 C 程序什么也查找不到?
该如何解决这个问题?
非常感谢!
A**o
发帖数: 1550
2
save your parameters into a file.
then feed the file for your c program?

【在 u**d 的大作中提到】
: 在 java 程序里要掉用外部的一个 C 程序
: Runtime.getRuntime().exec(cmd);
: 其中cmd对应一个C语言的查找程序,输入参数(即查找对象是)西欧字符串,
: 是 ISO-8859-1 编码
: 我知道在 java 里String都存储成 Unicode
: 但是这样调用的结果就是无法得到任何结果
: 我想是不是因为调用外部命令时,java还是按照 unicode 处理的,
: 这样的话,输入参数(西欧字符)就被强行转换,从而就不再是原来的字符
: 所以 C 程序什么也查找不到?
: 该如何解决这个问题?

z***h
发帖数: 405
3
我直觉认为 是你没有用对 Runtime.getRuntime().exec(cmd);
不太可能是Java连这个都处理不好

【在 u**d 的大作中提到】
: 在 java 程序里要掉用外部的一个 C 程序
: Runtime.getRuntime().exec(cmd);
: 其中cmd对应一个C语言的查找程序,输入参数(即查找对象是)西欧字符串,
: 是 ISO-8859-1 编码
: 我知道在 java 里String都存储成 Unicode
: 但是这样调用的结果就是无法得到任何结果
: 我想是不是因为调用外部命令时,java还是按照 unicode 处理的,
: 这样的话,输入参数(西欧字符)就被强行转换,从而就不再是原来的字符
: 所以 C 程序什么也查找不到?
: 该如何解决这个问题?

u**d
发帖数: 211
4
getRuntime().exec(cmd) 有什么要注意的地方么?
我的外部程序就是 cmd="./list 'xxxx'" 其中 xxxx 使用 jdbc 从数据库
获取的字符串,数据库的内容是西欧字符,用 unicode 编码
在 shell 下运行 ./list 'xxxx',xxxx 必须要是 iso-8859 编码
但在 getRuntime().exec 的说明文档里,没有看到指定编码的地方
有一种用法是 exec(String command, String[] envp)
还是 envp 能设定编码?
谢谢

【在 z***h 的大作中提到】
: 我直觉认为 是你没有用对 Runtime.getRuntime().exec(cmd);
: 不太可能是Java连这个都处理不好

z***h
发帖数: 405
5
应该和编码没有任何关系
your java Runtime probably couldn't find ./list
print out the stderr and stderr of the process to see what the output and
error
are.

【在 u**d 的大作中提到】
: getRuntime().exec(cmd) 有什么要注意的地方么?
: 我的外部程序就是 cmd="./list 'xxxx'" 其中 xxxx 使用 jdbc 从数据库
: 获取的字符串,数据库的内容是西欧字符,用 unicode 编码
: 在 shell 下运行 ./list 'xxxx',xxxx 必须要是 iso-8859 编码
: 但在 getRuntime().exec 的说明文档里,没有看到指定编码的地方
: 有一种用法是 exec(String command, String[] envp)
: 还是 envp 能设定编码?
: 谢谢

z***h
发帖数: 405
6
BTW, actually you should always read(and print out) the stdout and stderr
from Java Runtime Process, because once the buffer is full, it could stuck.

【在 z***h 的大作中提到】
: 应该和编码没有任何关系
: your java Runtime probably couldn't find ./list
: print out the stderr and stderr of the process to see what the output and
: error
: are.

m******t
发帖数: 2416
7
Try the other exec(), i.e. getRuntime().exec(String[] cmdarray),
and see if jvm handles the conversion better than your pair of
single quotes.
If that doesn't work, pipe xxxx through uni2ascii before
sending it to ./list. You may have to write a small shell
script to do that.

【在 u**d 的大作中提到】
: getRuntime().exec(cmd) 有什么要注意的地方么?
: 我的外部程序就是 cmd="./list 'xxxx'" 其中 xxxx 使用 jdbc 从数据库
: 获取的字符串,数据库的内容是西欧字符,用 unicode 编码
: 在 shell 下运行 ./list 'xxxx',xxxx 必须要是 iso-8859 编码
: 但在 getRuntime().exec 的说明文档里,没有看到指定编码的地方
: 有一种用法是 exec(String command, String[] envp)
: 还是 envp 能设定编码?
: 谢谢

1 (共1页)
进入Java版参与讨论
相关主题
菜鸟请教个hadoop streaming job 的问题 (转载)
read from multiple inputstreams at the same time?
[提问] The JVM could not be started
Runtime.exec()是blocking的吗?
Re: JAVA有没有象C中SYSTEM那样的METHOD?
Re: How can I call another program from Java?
Java runtime?
Re: 怎么能是JAVA里的数组开的更大?
Java will store your chinese into Unicode
Java basic concept(2)
相关话题的讨论汇总
话题: 编码话题: exec话题: java话题: string话题: 外部命令