Redian新闻
>
[请教]调用外部命令编码的问题
avatar
[请教]调用外部命令编码的问题# Java - 爪哇娇娃
u*d
1
在 java 程序里要掉用外部的一个 C 程序
Runtime.getRuntime().exec(cmd);
其中cmd对应一个C语言的查找程序,输入参数(即查找对象是)西欧字符串,
是 ISO-8859-1 编码
我知道在 java 里String都存储成 Unicode
但是这样调用的结果就是无法得到任何结果
我想是不是因为调用外部命令时,java还是按照 unicode 处理的,
这样的话,输入参数(西欧字符)就被强行转换,从而就不再是原来的字符
所以 C 程序什么也查找不到?
该如何解决这个问题?
非常感谢!
avatar
A*o
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 程序什么也查找不到?
: 该如何解决这个问题?

avatar
z*h
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 程序什么也查找不到?
: 该如何解决这个问题?

avatar
u*d
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连这个都处理不好

avatar
z*h
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 能设定编码?
: 谢谢

avatar
z*h
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.

avatar
m*t
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 能设定编码?
: 谢谢

相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。