WordPressサイトでhtmlファイルが文字化け

WordPress

表示できた、と思ったら文字化け

かつてhtmlで作成していたホームページ、WordPressの中で表示できるようになりました。その顛末は既に以下の記事にしました。興味のある方はぜひお読み下さい。

表示できたのですが、できたのは本当に表示までなんですね。実は文字化けしてしまい、内容が読めなかったんです。WordPressで表示される画面がちょうど以下のようになってしまいます。

上の画面中、文字化けせずに表示されている部分は画像ファイルを呼び出しているからです。テキストを呼び出している場合には全て文字化けです。さて、困った。この現象にどう対応したのかが、本記事の内容です。

文字コードの存在

テキスト文を呼び出している場合に文字化けが発生した、と書きました。テキスト入力した内容は、個々のテキストごとに割り振られた文字コードによって認識、記録されています。その文字コード(文字認識のルールといってもいいかもしれません)は、日本語では複数存在しています。ルールが一つではないということですね。

何故日本語では複数のルールが存在するのか。もともとパソコンでは英数字しか使えませんでした。英語圏ではそれで十分、そのために策定されたコードがASCII(American Standard Code for Information Interchange)です。ただ、日本語を表示させるためにはASCIIだけでは不十分でした。だって日本語は文字種が多いのですから(漢字の数を思い浮かべれば納得できると思います)。

日本でのパソコンの黎明期、パソコンで漢字を使えるようにするための文字コードが幾つか策定されました。それぞれに利便性を求めての策定だったわけですが、結果として現在も使われている日本語の文字コードは大きくは以下の三つ(私の判断です)ではないかと思われます(コード策定の背景には様々な経緯があったわけで、それはそれで面白い物語なのですが、ここでは触れません)。

  • Shift_JIS
  • UTF-8 BOM付き
  • UTF-8 BOM無し

ブラウザーにホームページを表示させるためには、ホームページを構成するデータをブラウザーに正しく読み込ませ、認識させる必要があります。元のテキストデータがどの文字認識のルールに基づいて書かれているか、その情報をブラウザーに伝えてあげて、初めて正しく表示されるわけです。そこに齟齬があると、文字化けが起こります。

WordPressはUTF-8 BOM無し

私がhtmlで作ったホームページの文字コードはShift_JISでした。すっかり忘れていましたが、htmlファイルの内容をテキストエディタで覗くと、しっかりと以下の構文が入っていました。

<META http-equiv=”Content-Type” content=”text/html; charset=SHIFT_JIS”>

さて、WordPressではどの日本語文字コードに対応しているかな、と調べてみました。WordPress Codexの該当部分を読むと、UTF-8のBOM無しが対応してそうです。そこで浅はかな私は、上記の宣言文で「SHIFT_JIS」の部分を「UTF-8」とすればいいだろうと思い、一つのファイルで試してみました。が、ダメでした。やはり文字化けしています。

考えてみれば当たり前でした。テキストで書かれている文字それ自体がSHIFT_JISに則ったデータで記録されているのですから。従って、ファイルに書かれているテキスト自体をUTF-8のBOM無しに則ったデータに変換する必要があります。一括変換ソフトがないものかと探すと、幾つか見つかりました。その中で私が試したのは、KanjiTranslatorという名のフリーソフトです。

使い方はいたって簡単、表示させたいホームページを構成するファイル群をフォルダごとドラッグ&ドロップし、変換先文字コードを「UTF-8 (BOM無し)」と指定します。相当の数のファイルがありましたが、変換は瞬時に終了しました。結果は成功、今回は文字化けせずに昔のホームページを表示してくれました。

WordPressとhtmlファイルの表示方法の違い

昔のホームページが問題なく表示されメデタシメデタシなのですが、WordPressとhtmlファイルの表示方法に関して感じた違いを備忘録的に書いておきます。

使用文字コードをShift_JISと指定する構文(先に示したものです)は、全てのhtmlファイルに書き込んであります。各テキストのコードの変換はKanjiTranslatorで一括瞬時に終えましたが、個々のファイルのこの構文で「Shift_JIS」と書かれている部分を「UTF-8」 に書き換える、いわばテキストの変換はファイルの数を考えると大変に面倒な作業です。結局私はその作業を行いませんでした。でも、文字化けせずに表示されています。

htmlファイルをブラウザーで表示させる時、構文で文字コードをShift_JISと指定し、かつ、文字コードもShift_JISでテキストが記述されている場合には文字化けは起こりません。同様に、構文でUTF-8と指定し、かつ、文字コードがUTF-8である場合も文字化けは起こりません。構文で指定される文字コードとテキスト記述で実際に用いられている文字コードが異なる場合に、文字化けが起こるわけです。

しかしWordPressではそうならなかった。WordPressでは各ページ(固定ページ、投稿ページともにです)に記載される内容(テキストその他のコンテンツ)はデータベースに格納され、その内容が各ページのphpファイルで呼び出されるテンプレートに従って表示される、これが私の理解です。従って、使用される文字コードは各ページで宣言するのではなく(そこに何と書かれようと影響を受けず)、WordPressというシステムの一部として各ページではないどこかで規定される(はず)、と思っています。

私のこの理解、間違っているところをご指摘いただければ幸いです。

コメント

タイトルとURLをコピーしました