Я читаю имя файла / сценария из XML-файла в кодировке utf-8. Затем он передается в VBScript. VBScript запускает вторую программу, которой эта переданная программа / скрипт предоставляется в качестве аргумента. Если аргумент указан на английском языке, сценарий VBScript выполняется успешно.
Но если имя, прочитанное из XML, не является английским (в моем случае русским), VBScript не сможет найти этот файл.
Я запускаю VBScript из кода Java только с использованием «cscript», так как я запускаю его в Windows.
Однако, если я скопирую команду, запущенную программой Java, для запуска VBScript и вставлю ее в командную строку, она выполняется нормально, несмотря на то, что имя аргумента написано не на английском языке.
Затем я жестко закодировал имя файла / скрипта в VBScript. Изменили кодировку VBScript на UCS2-LE и напрямую запустите его из командной строки. Выполнено нормально. Не удалось выполнить для любой другой кодировки, используемой для VBScript. Также неанглийский текст отображается как? в любой другой кодировке, кроме UCS2-LE.
Затем я попытался закодировать имя файла / сценария в UTF16-LE на Java, а затем передал его в VBScript. Независимо от того, какая кодировка использовалась в VBScript, она терпит неудачу. Опять же, если я скопирую команду, напечатанную на стандартном выводе, из программы Java и выполню ее из cmd, она выполнится
Команда, напечатанная с Java, правильно отображает неанглийский текст.
Может кто-нибудь помочь мне решить проблему?
Любая относительная помощь будет принята с благодарностью.
Это то, чем я сейчас занимаюсь. Мне нужно передать аргумент, содержащий русский текст, в VBScript из Java.
Я пытался использовать два разных подхода.
Первый подход в приведенном ниже коде записывает русский текст в файл с использованием кодировки UnicodeLittle. Обнаружен файл в кодировке UCS-2LE. Затем VBScript считывает значение из этого файла и сценарий успешно выполняется.
Во втором подходе я попытался напрямую передать закодированный русский текст в качестве аргумента скрипту. VbScript терпит неудачу, говоря, что скрипт не может быть открыт. Это подход, для которого я хочу найти решение.
Ниже приведен код Java.
Любая помощь будет принята с благодарностью.
public class CallProgram
{
private static String encodeType = "UnicodeLittle";
private File scriptName = new File( "F:\\Trial Files\\scriptName.txt" );
public static void main(String[] args)
{
CallProgram obj = new CallProgram();
Runtime rt = Runtime.getRuntime();
try
{
**//Approach1 - Writes text to file and calls vbscript which reads text from file and uses it as an argument to a program**
String sName = "D:\\CheckPoints_SCRIPTS\\Менеджер по качеству"; //Russian Text
byte [] encodedByte= sName.getBytes( encodeType );
String testCase = new String( encodedByte, encodeType ); //New string containing russian text in UnicodeLittle encoding...
obj.writeToFile( testCase ); //Writing russian string to file...
String mainStr = "cscript /nologo \"D:\\Program Files\\2.0.1.3\\Adapter\\bin\\scriptRunner_FileRead_Write.vbs\"";
Process proc1 = rt.exec( mainStr );
int exit = proc1.waitFor();
System.out.println( "Exit Value = " + exit );
**//Approach 2 - Passing encoded Russian text directly to VbScript...**
//This is not working for me...
String [] arrArgs = { "cscript", "/nologo", "\"D:\\Program Files\\IBM\\Rational Adapters\\2.0.1.3\\QTPAdapter\\bin\\scriptRunner.vbs\"", testcase };
ProcessBuilder process = new ProcessBuilder( arrArgs );
Process proc2 = process.start();
proc2.waitFor();
}
catch (IOException e)
{
e.printStackTrace();
}
catch ( InterruptedException intue )
{
intue.printStackTrace();
}
}
//Function to write Russian text to file using encoding UnicodeLittle...
private void writeToFile( String testCase )
{
FileOutputStream fos = null;
Writer out = null;
try
{
fos = new FileOutputStream( this.scriptName );
out = new OutputStreamWriter( fos, encodeType );
out.write( testCase );
out.close();
fos.close();
}
catch (FileNotFoundException e)
{
e.printStackTrace();
}
catch ( IOException ioe )
{
ioe.printStackTrace();
}
finally
{
try
{
if ( fos != null )
{
fos.close();
fos = null;
}
if ( out != null)
{
out.close();
out = null;
}
}
catch( IOException ioe )
{
fos = null;
out = null;
}
}
} // End of method writeToFile....
}