Text-Processing

修復字元編碼混亂

  • April 2, 2022

我正在建構一個腳本以從字元編碼損壞的網站中提取一些數據:

  • html 標頭聲稱它是 iso-8859-1,但它不是
  • wget文件顯示它實際上是 utf-8,但字元錯誤
  • 逆向工程向我展示了有人設法將 windows 程式碼頁 1252 用作 unicode 程式碼!

例如,反引號在程式碼頁 1252 中是 0x91,在此頁面中是 U+0091。詭異的。令人驚訝的是,網路瀏覽器似乎能夠自動修復這個問題。

我的問題:哪個工具可以幫助我清理這個爛攤子?(不是手工!這是一個有數百頁的動態網站,我看到至少六種不同的錯誤編碼。)

根據您對“非手工”的含義,iconv可能對您的任務有用。

iconv - 將文本從一種字元編碼轉換為另一種

選項

   -f from-encoding, --from-code=from-encoding
          Use from-encoding for input characters.

   -t to-encoding, --to-code=to-encoding
          Use to-encoding for output characters.

根據我的經驗,即使您必須處理錯誤的編碼,iconv 也可以工作。例如,您可以告訴 iconv 輸入數據是 utf-8 編碼的,即使它是 iso-8859,這樣 iconv 就好像輸入是 utf-8 一樣。這樣您就可以修復錯誤編碼的數據。

由於 iconv 可以用作過濾器,因此您可以將其與curl. 當wget您使用--output-document -.

據我所知,iconv 無法檢測/猜測正確的輸入編碼。但是根據您的輸入數據的混亂程度,如果網站(太多)有許多不同類型的錯誤/混合編碼,這可能無論如何都是“不可能的”。如果整個網站都以同樣的方式搞砸了,你應該能夠修復它。

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