儲存包含無效字元的文件
我們從客戶那裡獲得的一些文件無法正確處理,因為它們被聲明為 US-ASCII 但包含無效字元。為了驗證軟體修復,我嘗試將原始文件中的幾行複製到一個新文件中。原始文件很大,我只需要幾行。
原始行在 gedit 中看起來像這樣
003002002002\D4M
,\D4
紅色部分,我收到有關無效字元的警告。在控制台上,原始行如下所示:003002002002�M
我試圖通過 head & tail 傳輸文件,但生成的文件包含一個“固定”字元而不是無效字元。
head -n 449025 invalid.txt | tail > invalid_short.txt
如果我 cat 結果文件,該行看起來像這樣:
003002002002�M
但是如果我用 gedit 打開結果文件,它看起來像這樣:003002002002ÔM
並且沒有無效字元我試圖在 gedit 中選擇行並將它們保存為新文件,但我只得到無效字元的表示,而不是原始字元。cat 和 gedit 看起來像這樣(沒有無效字元警告,沒有紅色):
003002002002\D4M
看起來我錯過了一些簡單的東西,但我不知道是什麼。
謝謝
Ubuntu 16.04,zsh
head
或者tail
不會修復/改變角色。可能會發生的是
gedit
嘗試根據前幾個字節猜測文件的編碼。當 0xD4 在文件中很遠時,gedit
猜測文件是 ASCII 或 UTF-8 格式,並在看到 ASCII 或 UTF-8 中無效的 0xD4 字節時抱怨。而對於第二個較短的文件,由於 0xD4 靠近文件的開頭,
gedit
猜測字元集是一些 8 位字元集(可能是 iso8859-1,其中 0xD4 是 Ô)。所以你的:
head -n 449025 invalid.txt | tail > invalid_short.txt
方法是正確的。如果你
sed -n l
在這兩個文件上執行,你會在這兩種情況下看到類似003002002002\324M
. 並與hd
:30 30 33 30 30 32 30 30 32 30 30 32 d4 4d |003002002002.M|
。