質問: こちらのQ&Aは、 途中で質問の内容が変わってしまったため、 一見すると質問と回答が食い違ってしまっています。 そのため、こちらに一連の流れを記載しておきます。 ご迷惑をおかけいたします。 --- 【当初の質問:HTMLファイルをWEB上にアップロードすると文字コードがISO-8859-1になってしまう】 BeautifulSoupでスクレイピングをすると、BeautifulSoup上では、自分でアップロードしたWEBサイトの文字コードが「ISO-8859-1」として認識されてしまう。ローカル上では文字コードが「UTF-8」になっているため、WinSCPでアップロードするときに文字コードが変換されてしまうのでは? ↓ しかし、WEB上にアップロードされているHTMLファイルをローカルにダウンロードし、文字コードを調べてみるとUTF-8のまま。つまり、WEB上のHTMLファイルもUTF-8のままであり、WinSCPによって文字コードが変換されているわけではない。 ↓ 回答者様のご指摘により、「WEBサイト自体に問題があるのではなく、BeautifulSoupでスクレイピングする際に文字コードが変換されている」ことが判明。 ↓ 【質問の変更:PythonのBeautifulSoupでスクレイピングするとhtml(utf-8)の文字コードがISO-8859-1になってしまう】 HTMLではcharsetで文字コードをUTF-8に指定しているにもかかわらず、なぜスクレイピングの際に文字コードが変換されてしまうのか。 ↓ レンタルサーバーの仕様により、ResponseのContent-Typeの文字コードを書き換えられてしまう(指定したcharsetを無視されてしまう)。その結果BeautifulSoupがUTF-8を認識できず、代わりにISO-8859-1として認識してしまい、その結果文字化けが発生する。 ↓ 解決する場合には、.htaccessでcharsetを修正する方法などが考えられる。ただし、今回はWEBサイト自体に問題がないことが分かったため、文字化けはBeautifulSoupサイドで工夫することで解決。 --- およそこのような流れになっています。 ご迷惑をおかけしてしまい申し訳ございません。 ↓↓↓↓↓↓↓↓ なお、当初の質問は下記の通りです。 ↓↓↓↓↓↓↓↓ 文字コードについて困っています。 WEBサイトをアップロードするにあたり、 ローカル上でhtmlを編集する際には、htmlファイルはutf-8になっており、 htmlのhead内でも下記のように文字コードを指定しています。 ``` ``` ところが、WEB上にアップロードすると、文字コードがISO-8859-1になってしまっているようです。 表面上は文字化けがないので、気づかなかったのですが、 pythonのbeautiful soupでスクレイピングをしてみたところ、 文字化けが発生し、文字コードがおかしくなってしまっている(ISO-8859-1になっている)ことに気が付きました。 OSはwindows 10、 FTPクライアントソフトにはWinSCPを使っています。 ファイルの編集や保存に当たり、 Dreamweaver、Atom、terapadなどを使ってみましたが、どれも結果は同じでした。 少なくともローカル上では確かにutf-8にもかかわらず、アップロード後に文字コードが変換されてしまうようです。 原因はわかりますでしょうか・・・?
回答: アップロード時にテキストモードでアップロードしてしまっているのでは無いでしょうか。 バイナリモードでのアップロードを試してみて下さい。 参考