Monday, October 11, 2021

中文檔在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。

Labels: , , , , , ,

0 Comments:

Post a Comment

Subscribe to Post Comments [Atom]

<< Home