もしも新入社員が文字化けの原因を探り、解決したら…

記事タイトルとURLをコピーする

みなさま、はじめまして。4月に入社したばかりの新人、永淵です。

まだまだスーツにも着られている私ですが、このたび「新人ならではのブログを書こう!」ということで、先日私が直面した“文字化け”トラブルの話をします。温かい目で読んでいただけると嬉しく思います。

もらったファイルを開いたら豆腐文字で表示されたり、いつも見ているウェブサイトが突然知らない国の文字で表示されたり・・・みなさまも一度は経験したことがあるのではないでしょうか?

なんで文字化けが起こるのか?そもそも文字って何?そんな自身の謎をひも解いていきたいと思います。

1.文字化けとは?

その名の通り、コンピューターで文字が正しく表示されない現象のことを言います。 文字は適当な“文字コード”で変換され、文字フォントを使って表示されることで私たちが読めるものになります。この文字コードをもともとの設定とは異なるものに設定してしまったときに、 いわゆる“文字化け”が発生します。

2.文字コードとは?

では、文字コードとはどういったものなのでしょうか? ご存知の通り、コンピューターは全てのデータを0か1のビット列で表現します。もちろん文字データもその例外ではなく、 コンピューター上で私たちが文字を読むことができるように、それぞれの文字にビットの組み合わせを割り当てて表現されます。そのようにどの文字をどのビット列に割り当てるか定めたルールを文字コードといいます。
つまり、

【文字を入力⇔コンピューターが読めるように0か1に変換⇔コンピューターが文字コードと照らし合わせて変換⇔私たちが読める】

この繰り返しによって文字は表示されています。 文字コードはコンピューターと私たちが会話をするための仲を取り持ってくれる存在だと言えそうです。
中でも、Unicodeは最も多く使用されている文字コードで、『世界中の文字を同一の文字コードにおさめてしまおう!』という規格です。その野心通り、多くの言語文字に対応した表現方法をもっています。

ときに、文字コードは“符号化文字集合”と“文字符号化方式”とに分類されます。

  •  重複なく、文字を集めたもの
  •  コンピューターで扱う文字集合のことをレパートリーという
  •  レパートリーは文字コードの標準、規格によって異なる
  •  通常、文字集合の各文字にはそれぞれ一意の符号が割り当てられており、この関連付けを符号化文字集合といい、文字コード表として定義される。

Unicodeの文字コード表はこちらのページで見ることができます。

  •  符号化文字集合で文字に割り当てられた(0以上の)整数値をコンピューターが理解できるビット列(データ列)に変換する方式のこと
  •  例えばUnicodeであればUTF-8 や UTF16 などが、JIS X 0208では、ISO-2022-JP や EUC-JP や Shift_JIS などがこの方式として定義されている
  •  それぞれの方式によって何ビットに変換するのかは異なる

文字化けは符号化方式が異なると生じます。 例えば・・・ UTF-8でAを表示するコードは'110'ですが、EUC-JPではAは'A3C0'で表します。

同じ文字を表わすにも全く違うデータになることにとても驚きます。

ここまでで簡単な言葉の説明は終わりにして、実際に私が直面した文字化け問題を解決していきたいと思います。
目的:LAMP環境でWordpressをインストールする
文字コード:UTF-8

vi wp-config.php //DBのデータ書き換え

とんでもないことになっています。

このとき初めて文字コードの存在を意識し、 とりあえずphpの設定ファイルを見直す必要がある、と思い文字コードが全てUTF-8になっているかの確認してみることに・・・

vi /etc/php.ini

    1132 mbstring.internal_encoding = EUC-JP
    1133 #;mbstring.internal_encoding = UTF-8

なっていない→

    1132 #;mbstring.internal_encoding = EUC-JP
    1133 mbstring.internal_encoding = UTF-8

に変更

またwp-config.phpファイルを見るが変わりなし。php.iniファイルはphpの内部で動かすために用意されているので、変更は無意味であることに気付きました。
つまり、 そのとき実際にconfigファイルを表示しているのはシェルであるため、シェルの文字コードを合わせる必要があるだろう、と考え、使用しているPuTTYの文字コードを見てみました。

見ての通り、文字コード設定が"EUC-JP"になっています。これはいわゆる文字コードが違うせいで起こる文字化けの典型であることを認識したので、これを"UTF-8"に変えました。


すると、すっきり。

文字化けが文字コードの違いで起こることを身をもって知ることができました。まとめると ファイルをつくるときにラベルで文字コードを設定し、そのファイルを開くツールでも文字コードを設定します。これらの文字コードが一致して初めて文字は私たちが読めるような形で表示されます。つまり、
【文字を入力⇔コンピューターが読めるように0か1に変換⇔コンピューターが文字コードと照らし合わせて変換⇔私たちが読める】
このコンピューターが文字コードと照らし合わせて変換の手順がポイントで、このときにコンピューターが同じ文字コード表を見ればもちろん期待通り、設定通りの変換ができるが、違う文字コード表を見てしまうと、 照らし合わせても照らし合わせても違う文字と照合してしまうので、あんぽんたんな変換をしてしまう、ということです。

Webブラウザでも様々なページを読める形で見ることができるときは文字コードが一致している、といえるわけです。 ただ、文字コードを明示していないものはビット列を見て自動で判別し、変換してくれる自動判別機能があったり、MIMEタイプで複数の文字コードを利用していたりするので、これが全てではありませんが。

おわりに

今回私は、Firefoxを使った実験を行いました。文字コードの設定を変えて、ブラウザを更新します。するとFirefoxは自動的に最新の文字コードに合わせて表示してくれるのです。Firefoxだけでなく様々なブラウザに備わるこの機能は、インターネット上の文字を通して情報を得るネットワーク社会を大きく支えているものだな、と感じました。 文字化けは見ると焦ってしまいがちですが、原因がわかると対処法も見えてくる簡単な問題なのでこれからは直面しても焦らず対処できそうです。 Unicodeは現在もビット数を増やしながら文字コード表を拡大しているらしいので、文字コードの発展で1つの情報を世界中で簡単に共有できるようになればいいな、と思います。

・・・
わからないことがわからないときに文字化けに出会うと、とても焦ります。少なくとも私は焦りました。こんな気分を味わう人が少しでも減ればいいなぁと思って書きました。 このブログが文字化けに悩む人、新入社員で「わーーーー!!」ってなっている人に読んでもらって少しでも助けになれば、共感してもらえれば・・・と思います。

今回のエントリは こちら のページを参考にさせていただきました。