Command-Line

過濾無效的utf8

  • January 17, 2019

我有一個未知或混合編碼的文本文件。我想查看包含無效 UTF-8 字節序列的行(通過將文本文件傳送到某個程序中)。同樣,我想過濾掉有效的 UTF-8 行。換句話說,我正在尋找.grep [*notutf8*]

一個理想的解決方案應該是可移植的、簡短的並且可以推廣到其他編碼,但是如果你覺得最好的方法是加入UTF-8 的定義,那就繼續吧。

如果你想使用grep,你可以這樣做:

grep -axv '.*' file

在 UTF-8 語言環境中獲取至少具有無效 UTF-8 序列的行(這至少適用於 GNU Grep)。

我想你可能想要iconv。它用於在程式碼集之間進行轉換,並支持數量驚人的格式。例如,要去除 UTF-8 中無效的任何內容,您可以使用:

iconv -c -t UTF-8 < input.txt > output.txt

如果沒有 -c 選項,它會報告轉換為 stderr 時出現的問題,因此使用過程方向可以保存這些列表。另一種方法是剝離非 UTF8 的東西,然後

diff input.txt output.txt

獲取更改位置的列表。

引用自:https://unix.stackexchange.com/questions/6516