2014-11-23 73 views
1

我已經創建了簡單的Firefox附加組件,它應該搜索文件中的頁面子字符串上的選定內容。 一切都很好,直到我嘗試搜索某些特定語言的子字符串,例如俄語。 使用呼叫窗口cmd命令propmt如下執行的搜索命令:Firefox附加組件 - 執行shell命令 - 參數編碼

  function getShell() 
      { 
       var env = Cc["@mozilla.org/process/environment;1"].getService(Ci.nsIEnvironment); 
       var shell = new FileUtils.File(env.get("COMSPEC")); 
       var process = Cc["@mozilla.org/process/util;1"].createInstance(Ci.nsIProcess); 
       process.init(shell); 

       return process; 
      } 

     var shell = getShell(); 
     var text = "россия"; 
     var folder = "c:\\temp\\test\\*.*"; 

    var cmd = "chcp 65001 & c:\\progra~1\\gnuwin32\\bin\\grep.exe -i -r " + text + " " + folder + " > c:\\temp\\test\\output.txt"; 
    cmd = utf16to8(cmd); 
    args = ["/k", cmd]; 
    shell.run(true, args, args.length); 

所以,我已經試過deode UTF-16爲UTF-8和執行沒有成功(改變shell執行中的代碼頁) 。但我已成功如下:

var cmd = "chcp 1251 & c:\\progra~1\\gnuwin32\\bin\\grep.exe -i -r " + text + " " + folder + " > c:\\temp\\test\\output.txt"; 
cmd = UnicodeToWin1251(cmd); 
args = ["/k", cmd]; 
shell.run(true, args, args.length); 

最後一個工作正常,但它不適用於其他語言。如何將內部javascript字符串轉換爲utf-8並執行命令usig 65001 codepage?

UnicodeToWin1251這裏 utf16to8採取這裏

回答

2

採取我已經解決了問題。爲了讓javascript引擎在unicode編碼中正確傳遞參數,必須使用nsIProcess的方法runw。因此,代碼發動shell命令行會如下:

shell.runw(true, args, args.length); 

在這種情況下的參數,使用UTF-16,將傳遞給它的命令行上的可執行文件。

RTFM here