命令列
rustz-cli 的參數與 ConvertZ 的命令列版 ConCmd 相容,另外加了幾個選項。
rustz-cli [/i:來源編碼] /o:輸出編碼 [選項] <輸入檔> [輸出檔]
rustz-cli [/i:來源編碼] /o:輸出編碼 [選項] <輸入檔1> <輸入檔2> <輸入檔3> …參數不分大小寫,可以寫在任何位置,以 / 開頭(/o:utf8);Windows 也接受 -(-o:UTF8)。macOS/Linux 上以 - 開頭的參數一律當成檔名(--help、--version 與 -- 除外),因為 shell 展開萬用字元時,可能剛好有個檔案叫 -y。rustz-cli /? 顯示說明。
編碼
| 代號 | 編碼 | 也接受 |
|---|---|---|
big5 | Big5 | b5、cp950 |
gbk | GBK | gb2312、cp936、gb18030 |
utf8 | UTF-8 | utf-8、u8 |
ule | UTF-16 LE | utf16le、unicode |
ube | UTF-16 BE | utf16be |
hz | HZ | hz-gb-2312 |
sjis | Shift_JIS | shift_jis、cp932 |
eucjp | EUC-JP | euc-jp |
jis | ISO-2022-JP | iso-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 /nobom | UTF-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 強制覆寫。
訊息與結束碼
✓ 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 | 參數錯誤 |
範例
# 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