中文檔在bash出亂碼,可能unicode須轉成utf-8
mac osx 與 linux bash 普遍支援 UTF-8 編碼,為 1~4 個bytes不定長度(variable-length) characters。例如ascii 是 1byte,中文字兩bytes。
unicode 係 定長編碼 (fixed-length),unicode 文字檔一般在檔頭加上 Byte order mark (BOM, 字節順序標記)。這種檔在GUI 文件編輯器開無問題,但在 bash 會出亂碼,不能用cat, sed 等命令。
例如有字幕ssa檔
00000000: fffe 5b00 5300 6300 7200 6900 7000 7400 ..[.S.c.r.i.p.t.
00000010: 2000 4900 6e00 6600 6f00 5d00 0d00 0a00 .I.n.f.o.].....
檔頭32bytes 為BOM,標記含義可參考 https://zh.wikipedia.org/wiki/位元組順序記號。
解決辦法 -- 強大轉碼(convert text encoding)工具:
$ iconv -f unicode -t utf-8 in.txt > out.txt
* * *
順帶一提,如果要刪除每行末 ^M ,可用 sed
s/^M//g
注意^M 是一個 character,輸入方法是 ctrl-v ctrl-m。
0 Comments:
Post a Comment
Subscribe to Post Comments [Atom]
<< Home