Character-Encoding

如何重新編碼混合編碼的文本文件

  • October 26, 2011

我有一個 ASCII 的日誌文件,除了幾個 UTF-8 字元(我可以為將來的版本修復)。

目前,我需要弄清楚如何通過 gedit/less 等使該文件處於可查看/可搜尋/可編輯狀態。

enca -L none file返回7bit ASCII characters Surrounded by/intermixed with non-text data

enconv -L none -X ASCII fileenconv -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

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