如何重新編碼混合編碼的文本文件
我有一個 ASCII 的日誌文件,除了幾個 UTF-8 字元(我可以為將來的版本修復)。
目前,我需要弄清楚如何通過 gedit/less 等使該文件處於可查看/可搜尋/可編輯狀態。
enca -L none file
返回7bit ASCII characters Surrounded by/intermixed with non-text data
。
enconv -L none -X ASCII file
和enconv -L none -X UTF-8 file
“成功”,但實際上並沒有改變任何東西。我該如何修復這個文件?
更新(在一些答案之後):
實際上,如下所述(贊成所有人:)),ASCII + UTF-8 就是 UTF-8。我所擁有的是
0003bbc0 28 4c 6f 61 64 65 72 29 20 50 61 74 69 65 6e 74 |(Loader) Patient| 0003bbd0 20 00 5a 00 5a 00 5a 00 38 00 31 00 30 00 34 00 | .Z.Z.Z.8.1.0.4.| 0003bbe0 20 6e 6f 74 20 66 6f 75 6e 64 20 69 6e 20 64 61 | not found in da| 0003bbf0 74 61 62 61 73 65 0d 0a 32 36 20 53 65 70 20 32 |tabase..26 Sep 2|
我相信它將是一個 cp1252 類型的編碼。實際上,我不知道它是什麼 cp1252 將是 ASCII 的 1 字節,不是嗎?
順便說一句,Linux barfs 幫助我弄清楚輸入文件(id 的來源)編碼錯誤……
你所擁有的實際上是帶有一點UCS-2的 ASCII(通常以 8 位字節編碼) (Unicode 僅限於基本平面 (BMP),其中每個字元被編碼為兩個 8 位字節),或者也許是UTF-16(UCS-2 的擴展,可以通過對 U+D7FF 以上的程式碼點使用多字編碼來編碼所有 Unicode)。
我懷疑你會找到一種可以開箱即用地處理這種邪惡混合物的工具。沒有辦法對文件進行全面解碼。在您的情況下,可能發生的事情是某些 ASCII 數據在某個時候被編碼為 UTF-16(Windows 和 Java 喜歡 UTF-16;它們在 unix 世界中幾乎聞所未聞)。如果您假設原始數據都是 ASCII,則可以通過剝離所有空字節來恢復可用文件。
<bizarre tr -d '\000' >ascii
一個“ASCII,除了幾個 UTF-8 字元”的文件就是一個簡單的 UTF-8 文件。
只要您使用 UTF-8 語言環境,它就可以查看/搜尋/編輯。
您不能將其轉換為 ascii,因為後者對於您的 UTF-8 特殊字元沒有等效的表示。
你可能想用
iconv -f UTF-8 -t ISO-8859-1