Text-Processing
如何在亂碼文件中用Unicode單字元搜尋和替換雙字元?
我有一個很長的法語文本文件,需要清理。非 ASCII 字元已替換為奇數字元的組合。例如,以下內容:
有一個偉大的年終慶祝活動。
應該變成:(作為 Unicode 文本)
有一個非常好的假期。
我試過sed,但沒有成功。一位朋友推薦嘗試 Perl。我可以輕鬆地建構一個包含奇數字元序列和正確替換字元的表格。理想情況下,我希望這張表成為一個獨立的文件以供將來使用。這種轉換的推薦方法是什麼?
看起來您的文本以 utf-8 編碼(這很好,因為它是 Unix 的標準),但隨後將其讀取為 ISO 8859-1 / Microsoft 的 windows Latin-1,然後輸出其解釋。你需要扭轉這一點。
例如
echo "passer de très bonnes fêtes de fin d'année" | iconv --to-code="ISO 8859-1"
這將採用損壞的編碼,並將其轉換為有效的 utf-8。如果您的系統配置為 utf-8,那麼它將正確讀取。
說明:如果我們做
echo è | od -t x1
andecho ê | od -t x1
,那麼我們看到十六進制程式碼是c3 a8 0a
andc3 aa 0a
,然後我們看這裡http://www.ascii-code.com/(這些是 iso 8859-1 程式碼,不是 ascii )我們看到這些程式碼giveè
和ê
都後跟一個不可見的字元。所以現在我們知道出了什麼問題:讀取 utf-8,但將其解釋為 iso 8859-1。所以我們現在需要反轉它:我們以我們正在讀取的任何格式讀取,並轉換為 iso 8859-1(與我們在這裡的相反)。結果是有效的 utf-8。