初步怀疑是两个程序间传递参数的时候,出现的问题,现象如下:1、本人做一个Java程序打开一个exe(c++编写)时,exe端读取Java端发送的参数出现乱码;
2、在中文操作系统下没有问题,但是切换到英文操作系统时,所有的中文参数都变成了"?"问号;
3、C++端代码没有问题,使用VC,Debug传参数时,中文是可以传递的!
4、Java端代码也没问题,debug到native方法时,所有参数正常表示!
5、尽可能不改变C++端代码!---------------------- Java端代码 ---------------------------
public static void main(String args[]) { String[] array = {
"D:\\act\\Debug\\act.exe",
"-view", "D:\\测试.txt" };// try {
// array[2] = new [code=Java]String(array[2].getBytes("unicode"), "unicode");
// } catch (UnsupportedEncodingException e1) {
// e1.printStackTrace();
// } try {
Process pro = Runtime.getRuntime().exec(array, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}[/code]---------------------- C++端代码 (unicdoe编译)---------------------------int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow )
{
::MessageBox(NULL, lpCmdLine, L"Debug", MB_OK);// 英文操作系统时,乱码!
}
2、在中文操作系统下没有问题,但是切换到英文操作系统时,所有的中文参数都变成了"?"问号;
3、C++端代码没有问题,使用VC,Debug传参数时,中文是可以传递的!
4、Java端代码也没问题,debug到native方法时,所有参数正常表示!
5、尽可能不改变C++端代码!---------------------- Java端代码 ---------------------------
public static void main(String args[]) { String[] array = {
"D:\\act\\Debug\\act.exe",
"-view", "D:\\测试.txt" };// try {
// array[2] = new [code=Java]String(array[2].getBytes("unicode"), "unicode");
// } catch (UnsupportedEncodingException e1) {
// e1.printStackTrace();
// } try {
Process pro = Runtime.getRuntime().exec(array, null, null);
} catch (IOException e) {
e.printStackTrace();
}
}[/code]---------------------- C++端代码 (unicdoe编译)---------------------------int APIENTRY _tWinMain(HINSTANCE hInstance,
HINSTANCE hPrevInstance,
LPTSTR lpCmdLine,
int nCmdShow )
{
::MessageBox(NULL, lpCmdLine, L"Debug", MB_OK);// 英文操作系统时,乱码!
}
---------------
支持unicode
4、Java端代码也没问题,debug到native方法时,所有参数正常表示!
你这两个操作也是在英文操作系统下做的吗?
4、Java端代码也没问题,debug到native方法时,所有参数正常表示!
你这两个操作也是在英文操作系统下做的吗?
-----------------------------
是
统一下编码格式~~试试看------------------------
能说的具体点吗?好像C++编译没有utf-8的编码吧!
另外,中文操作系统是正常的,所以应该和操作系统默认的编码有关系
String str=new String(b,"iso-8859-1");
String str=new String(b,"iso-8859-1");
没那么简单,
private native long create(String cmdstr,
String envblock,
String dir,
boolean redirectErrorStream,
FileDescriptor in_fd,
FileDescriptor out_fd,
FileDescriptor err_fd);
这个方法,在不同的OS上,执行的不一样!