Command-Line
過濾無效的utf8
我有一個未知或混合編碼的文本文件。我想查看包含無效 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
獲取更改位置的列表。