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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 在 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 在 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 我直觉认为 是你没有用对 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : 应该和编码没有任何关系 : 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 的大作中提到】![](/moin_static193/solenoid/img/up.png) : getRuntime().exec(cmd) 有什么要注意的地方么? : 我的外部程序就是 cmd="./list 'xxxx'" 其中 xxxx 使用 jdbc 从数据库 : 获取的字符串,数据库的内容是西欧字符,用 unicode 编码 : 在 shell 下运行 ./list 'xxxx',xxxx 必须要是 iso-8859 编码 : 但在 getRuntime().exec 的说明文档里,没有看到指定编码的地方 : 有一种用法是 exec(String command, String[] envp) : 还是 envp 能设定编码? : 谢谢
|