文字エンコーディングが破損したWebサイトから一部のデータを抽出するスクリプトを作成しています。
- htmlヘッダーはiso-8859-1と主張しますが、そうではありません。
wget
ファイルを調べると、実際にはutf-8ですが、間違った文字があることを示しています。- リバースエンジニアリングにより、誰かがWindowsコードページ1252をUnicodeコードとして使用したことがわかります。
たとえば、バックティックはコードページ1252では0x91、このページではU + 0091です。奇妙な。驚くべきことに、Webブラウザはこの問題を自動的に解決できるようです。
私の質問:この混乱をきれいにするのにどのようなツールが役に立ちますか? (手で作成したものではありません。このウェブサイトは数百ページの動的ウェブサイトであり、少なくとも6つ以上の異なる誤ったエンコードを見ました。)
ベストアンサー1
「手でしない」が意味するものに応じて、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はうまく機能します。たとえば、入力データがISO-8859の場合でも、UTF-8でエンコードされたことをiconvに指示して、iconvが入力がUTF-8のように動作するようにすることができます。これにより、誤ってエンコードされたデータを修正できます。
iconvはフィルタとして使用できるため、同じものと一緒に使用できます。 Link withはcurl
使用時にもwget
機能します--output-document -
。
私が知っている限り、iconvは正しい入力エンコーディングを検出/推測できません。ただし、入力データがどれほど汚れているかに応じて、サイトにさまざまな種類のエラー/混合エンコードがある場合、これは「不可能」になる可能性があります。サイト全体が同じように混乱している場合は、それを修正できます。