①これを効率良く直す方法を教えてください。
②ソースだけが、しかもコピペした箇所だけでなく全体が文字化けする理由を教えてください。
①について、Shift-JISのHTMLファイルをまずUTF-8に変換してからコピペする、という方法で直るのかな?と思うのですが、また一からコピペし直すのが面倒なので、他にいい方法がないか探しています。
テキストエディタとしてはterapadとdreamweaverが手元にあります。
これらを活用した方法だと助かります。よろしくお願いします。
「ソースが文字化け」というのは、ブラウザを右クリックして出てくるメニュー(ソースを表示)のことです。Firefoxで見ると文字化けしますが、いま、IE9とchromeで見たら文字化けしてませんでした...。
HTMLファイル自体ももちろん文字化けしていません。
UTF-8にShift-JISをコピペしても特に問題ないものなんでしょうか?
でも、Firefoxで見たソースだけ文字化けしているのが気になります...
※HTMLファイルをUTF-8で保存したのでしたら、「Unicode(UTF-8)」に設定すると正常に表示されると思います。
これは、ソースそのものには特に問題がない→つまりUTF-8のファイルにShift-JISのファイルからコピペしても問題がなく、ただソースを表示するブラウザ側の問題、ということなんでしょうか?
通常はmetaタグで指定した文字コードで表示されているようです。
ブラウザでの表示は問題ないという事ですので、どうやら違うようですが・・・
※HTMLソースの前半部分はどうなっていますか?
良ければそのままコピー&ペーストして教えてください。(ファイルの最初からheadの終了タグくらいまであればいいですが、長すぎる場合は文字コード設定とtitleタグまであればいいです。)
※はてな初心者なのでよく分からないのですが、コメントだとポイントを配分できなかったりするのでしょうか?よろしければ、ポイントを差し上げたいので、回答として投稿していただけると嬉しいです。
↓
Firefoxでソースを表示した時に、表示>文字エンコーディングは「自動判別>日本語」にしているのですが、自動で「日本語(Shift-JIS)」が選択されてしまって、文字化けしているようです。UTF-8にすれば文字化けは解消しますが、charsetもUTF-8に設定しているのに、なぜ自動判別でShift-JISが選択されるのかが分かりません。
「HTTP プロトコル中の charset」というのは HTML 中に記述する charset ではなく、Web サーバ側の設定で決まる charset で、FIrefox であれば「開発ツール」-「Web コンソール」を選択して、「ネットワーク」のボタンが選択されている状態でアクセスすると、各通信の一覧が表示されるので、それをクリックした時に表示される情報の中の「応答ヘッダ」に「Centent-Type」という名称のヘッダに記述されます。
で、手元で
・UTF-8 で書いた HTML ファイルを Web サーバに置いておく。
・HTTP ヘッダ中で charset が指定されないように、Web サーバを設定しておく。
という状態でソースを表示してみると、
・ソースビューアの文字エンコーディングの選択は Shift_JIS のまま。
・でも、文字化けされていない。
・手動で文字エンコーディングに UTF-8 を選択しても何も起こらない。
・そこから Shift_JIS を選択すると文字化けする。
という挙動になりました。おそらく、ソースビューアを起動した直後は、
・文字エンコーディングの選択状態は Shift_JIS。
・でも、内部的な状態は UTF-8 として処理している。
という状態ではないかと想像します。
ただ、一部が文字化けする、という現象は説明できませんし、エディタとの間のコピー&ペーストで問題が発生する事も説明出来ません。
う~ん...。
検証ありがとうございます!
レスポンスヘッダを見てみたところ、Content-Type text/htmlとなっていました。特にcharset は指定されていない、ということになるのでしょうか。それでShift-JISと自動判別される理由は解決しました。
しかし、やはりソースだけが文字化けしています。ソースビューアの言語をUTF-8に変えてやると、文字化けは直るのですが..。
たまたま開いていた別のサイトもレスポンスヘッダにcharset が含まれておらず、HTMLの文字コード指定はUTF-8で、ソースビューワの自動判別は初期でShift-JISになっているのに、文字化けしておらず、UTF-8を選んでも変化なし、Shift-JISを選び直すと文字化けするという、まさにJULYさんと同じ状況が再現できました。
なぜ全く同じ状況なのに、自分のページだけ文字化けするのか....何か原因があるんでしょうけど。。
> 特にcharset は指定されていない、ということになるのでしょうか。
その認識で間違いないです。
> それでShift-JISと自動判別される理由は解決しました。
細かいニュアンスで申し訳ないですが、自動判別の結果が Shift_JIS ではなく、あくまでもメニュー上の文字エンコーディングの選択状態が、あたかも Shift_JIS で認識しているように見える、というもので、ソースビューアが実際にどの文字コードとして扱っているかは分からない、という状況です。
例えば、ソースビューアのメニューで「表示」-「文字エンコーディング」で「西欧(iso-8859-1)」を選択すれば、日本語が含まれていれば文字化けすると思います。この状態から「表示」-「文字エンコーディング」-「自動判別」-「日本語」と選択すると、文字化けは解消しますがメニュー上は「西欧(iso-8859-1)」が選択された状態のままです。正しく表示できているのだから、ソースビューアが認識している文字コードは iso-8859-1 ではない事は明らかですが、じゃぁ、なんの文字コードなのか? というのは結局分かりません。
ブラウザの方は、右ボタンんのメニューから「ページの情報を表示」とすれば、どの文字コードとして最終的に認識しているかは分かるのですが、ソースビューアの方に、これに該当する物は見当たりません。
おそらくは、ブラウザで認識した文字コードを採用していると思うのですが、それだと、ブラウザで正しく表示されていて、ソース表示で文字化けすることが説明できないし...。
実は、HTML のソース自体は、本当に文字コード混在(もしくは、Web サーバへの転送の際に意図しない変換があって、微妙に中身が壊れているとか)していて、でも、ブラウザの表示は JavaScript の結果で、結果的に文字化けしている所が隠れてしまっている、なんて事は無いですよね、さすがに。
詳細ありがとうございます。ブラウザのソースビューアって思ったよりもずっと複雑な仕組みなんですね。結局、文字コードを変換してコピペしても改善せず、「西欧(iso-8859-1)」までもが自動判別で選択されるページまででてきてしまったので、もうお手上げかなというところです。
javascriptの件は、あながち間違ってないかもです....もう原因としてそれしか無い気がします(複雑なJSが多数入っているようなので...)
時間がある時に腰を据えて原因を探ってみたいと思います。
何度もありがとうございます!大変勉強になりました。