Skip to content

命令列 ​

rustz-cli 的參數與 ConvertZ 的命令列版 ConCmd 相容,另外加了幾個選項。

text
rustz-cli [/i:來源編碼] /o:輸出編碼 [選項] <輸入檔> [輸出檔]
rustz-cli [/i:來源編碼] /o:輸出編碼 [選項] <輸入檔1> <輸入檔2> <輸入檔3> …

參數不分大小寫,可以寫在任何位置,以 / 開頭(/o:utf8);Windows 也接受 -(-o:UTF8)。macOS/Linux 上以 - 開頭的參數一律當成檔名(--help、--version 與 -- 除外),因為 shell 展開萬用字元時,可能剛好有個檔案叫 -y。rustz-cli /? 顯示說明。

編碼 ​

代號編碼也接受
big5Big5b5、cp950
gbkGBKgb2312、cp936、gb18030
utf8UTF-8utf-8、u8
uleUTF-16 LEutf16le、unicode
ubeUTF-16 BEutf16be
hzHZhz-gb-2312
sjisShift_JISshift_jis、cp932
eucjpEUC-JPeuc-jp
jisISO-2022-JPiso-2022-jp

/i: 省略時自動偵測,方法見編碼與自動偵測。

選項 ​

參數說明
/i:編碼來源編碼。指定時,看起來像二進位檔的檔案也照常轉換
/o:編碼輸出編碼(/n 時可省略)
/f:t /f:s /f:d繁體、簡體、不轉換字形。省略時:輸出 Big5 → 繁體、GBK/HZ → 簡體、其他 → 不轉換,而且只在文字確實是另一種字形時才轉換
/e:opencc /e:convertz繁簡轉換引擎
/v:tw /v:hk /v:std繁體字形標準(OpenCC 引擎):臺灣、香港、OpenCC 標準
/p /p-開啟/關閉臺灣慣用詞轉換
/q不顯示訊息
/b覆寫原檔前先備份成「原檔名.bak」;已存在就改用「原檔名.1.bak」「.2.bak」…
/cu把 &#NNNN; 數字記法轉成文字
/s萬用字元與資料夾一併處理子資料夾
/n試轉:只顯示偵測與轉換結果,不寫入任何檔案
/y輸出檔已存在時直接覆寫
/force有無法解碼的位元組時仍覆寫原檔(預設會略過,見下方)
/bom /nobomUTF-8 輸出是否加 BOM
--之後的參數一律當成檔名

沒有寫在命令列的選項(引擎、字形標準、慣用詞、BOM、&#NNNN;、忽略的檔案類型、網頁類型……)依設定檔的值。

輸入 ​

  • 檔案:直接給路徑。
  • 資料夾:資料夾裡的所有檔案;加 /s 包含子資料夾。
  • 萬用字元:* 與 ?,只能用在檔名部分(src/*.js),不能用在資料夾名稱。
  • 多個輸入:一次給三個以上的參數,全部視為輸入檔並各自覆寫原檔。
  • -:從標準輸入讀取,結果寫到標準輸出(或第二個參數指定的檔案)。

資料夾與萬用字元會略過設定檔中「忽略的檔案類型」、以「.」開頭的資料夾,以及 RustZ 的暫存檔;直接指名的檔案一律處理。

macOS/Linux 請用引號包住萬用字元

shell 會先展開 *.txt。如果剛好展開成兩個檔案,就變成「輸入檔+輸出檔」。RustZ 遇到第二個參數是已存在的檔案時會報錯並停止,不會覆寫;請改寫成 "*.txt",或真的要覆寫時加 /y。

輸出 ​

第二個參數結果
省略覆寫原檔(加 /b 先備份)
out.txt(不存在)寫到這個檔案;只能有一個輸入檔
out.txt(已存在)需要 /y 才會覆寫
out/ 或已存在的資料夾寫到資料夾裡,保留相對路徑
"out/*.abc"依樣式命名:* 換成原主檔名,例如 test.txt → out/test.abc
"out/*.*"檔名不變,寫到 out/
-寫到標準輸出

寫入時先寫到隨機命名的新暫存檔,完成後再更名。暫存檔與備份檔一律以「建立新檔」的方式開啟,資料夾裡預先放好的符號連結(例如來自下載的壓縮檔)不會被跟著寫出去;另存到資料夾時,經由符號連結指到資料夾外的路徑會被拒絕。轉換後內容完全相同、且輸出就是原檔時不會重寫。

有無法解碼的位元組時不覆寫

位元組無法以來源編碼解讀時會變成 �,原始內容就遺失了。這種檔案要就地覆寫、又沒有備份時,RustZ 會略過。請用 /i: 指定正確的編碼,或加 /b 備份、/force 強制覆寫。

訊息與結束碼 ​

text
  ✓ src/a.js  GBK(偵測) → UTF-8 · 簡→繁
  = src/b.js  UTF-8(偵測) → UTF-8(內容無變更)
  - logo.dat  略過(看起來是二進位檔;若確定是文字檔請用 /i: 指定編碼)
      ⚠ 有 3 個字元無法以 Big5 表示,已以 ? 取代
完成:轉換 1、無變更 1、略過 1、失敗 0(共 3 個檔案)

偵測結果後面的括號:「偵測」是依內容判斷、「BOM」是檔頭有 BOM、「推測」是線索不足時的猜測、「ASCII」是純英數內容。

結束碼意思
0所有檔案都已轉換或無變更
1有檔案失敗,或被略過(看起來是二進位檔,或會遺失無法解碼的位元組)
2參數錯誤

範例 ​

sh
# ConCmd 的經典用法
rustz-cli /i:big5 /o:ule /f:s test1.txt test2.txt
rustz-cli /i:utf8 /o:big5 "*.*"
rustz-cli /o:utf8 /f:t "k*.txt" "D:\Temp Dir\*.abc"

# 整個專案轉成 UTF-8(含子資料夾),先備份
rustz-cli /o:utf8 /s /b src

# 只看偵測結果
rustz-cli /n /s .

# 管線
cat 简体.txt | rustz-cli /o:utf8 /f:t - > 繁體.txt

# 用 ConvertZ 相容引擎、不轉慣用詞
rustz-cli /o:big5 /e:convertz gbk.txt big5.txt
rustz-cli /o:utf8 /f:t /p- 简体.txt 繁體.txt

取自 ConvertZ 的對照表僅供個人非商業使用;OpenCC 詞庫為 Apache-2.0 授權。