sed處理xshell軟件記錄的日誌文件的編碼問題

UTF-16 編碼造成 sed 無法正常工作

昨天在使用 sed 替換一個文件中的內容時,發現 sed 無法正常工作。將文件上傳到虛擬機中,執行同樣的命令仍舊不能正常工作,一度讓我懷疑自己是不是把命令記錯了。

使用了非常簡單的刪除命令發現也不能正常工作,讓人有點無語。

這之後又用一個系統中的正常文件進行測試,發現 sed 可以正常工作,我感到非常的不解。

文件編碼的問題

搞了一會,使用 cat -A 查看了下文件的內容時,發現竟讓輸出了一堆亂碼,如下所示:

^@o^@l^@d^@_^@r^@e^@g^@ ^@i^@s^@2^@d^@4^@0^@c^@0^@0^@^M^@$

看到了這個輸出,我才反應過來應該是編碼的問題。執行 file 命令查看文件的編碼,發現竟然是 UTF-16。

相關的信息如下:

longyu@longyu-pc:/tmp$ file test.log 
test.log: Little-endian UTF-16 Unicode text, with CRLF line terminators

iconv 編碼轉換

我使用 sed 替換的 test.log 文件的部分內容如下:

old_reg is 12940c00, ret is 12940c00
old_reg is 12d40c00, ret is 12d40c00

執行如下 iconv命令轉換編碼爲 UTF-8。

longyu@longyu-pc:/tmp$ iconv -f UTF-16 -t UTF-8 ./test.log  | file -
/dev/stdin: ASCII text, with CRLF line terminators

再次使用 sed 處理轉化過的文件,能夠正常工作。

UTF-16 的編碼文件怎麼來的

sed 不能處理 Unicode 的問題我是有所瞭解的,但是我卻忽略了文件的格式爲 UTF-16 的問題。

這個 test.log 是 xshell 中記錄的日誌文件,有必要記錄一下,免得以後踩相同的坑。

發佈了128 篇原創文章 · 獲贊 19 · 訪問量 4萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章