メインコンテンツまでスキップ

文字コードってなんなんだ

· 約6分
ootomonaiso
8期生,部長,業務用ITソフトウェア・ソリューションズ班班長

こんにちは大友内装(粒)です。 今日は文字コードについて語っていきたいと思います。

文字コードってそもそもなんだ

文字コードは簡単に言えば数字を文字に直せる暗号表 皆さんご存じの通りコンピュータは0と1という限られた数字しか扱うことができません。 計算などであれば2進数を使って計算できます。しかしながら0と1だけでは文字はおろかポケベルのような数字を使った語呂合わせすら満足に行うことができません。

おおよその文字コードのしくみ

縦軸と横軸に数字を割り当てて、縦4ビット横4ビットの計8ビット(=1バイト)で文字を示す対応表がよくある文字コードです。1バイト文字コードと2バイト文字コードがあります。全角文字の存在のせいです。また、2バイトでも物足りない人のために文字符号を使った大規模な文字コードもあります。

文字化けするのは文字コードのせい?

文字コードは数字の組み合わせで対応する文字を作っています。文字コードは元々アメリカなどの英語を用いる文化圏でできたものです。そのため、英語や数字、キーボードにあるような\=などの記号は大抵文字化けしないで素直な子でいてくれます。

しかしながら、日本語は世界的に見ればマイナー言語です。そんな日本語を文字コードとして搭載する場合、文字コードの種類によって文字コードに搭載されている順番が異なります。そのため盛大に文字化けするというわけです。

試しのこのUTF-8で書いたテキストを変換してみましょう

愛知総合工科のみなさんこんにちは

Shift-JISではこのようになります

諢帷衍邱丞粋蟾・遘代�ョ縺ソ縺ェ縺輔s縺薙s縺ォ縺。縺ッ

なんということをしてくれたのでしょう 原型すらないではありませんか

これはUTF-8とShift-JISでは互換がないということを示しています。解読する暗号表が違うから暗号を解読できないってことです。

これによって引き起こされるSTEM部員にとっては致命的な問題は ログを出力してもことごとく文字化けして何が起きているかわからないことや、正常な動作をしてくれない事があげられます。

単純にテキストファイルだった場合は特に問題はないのです。文字コードのエンコード方式を変えればそのうち答えにたどり着きます。

しかし問題はソフトウェアで利用するとき。 そう例えばファイルパスに日本語が含まれたとき。 例えば変数や関数名に日本語を入れてしまったとき。

ソフトウェアくんは「ファイルパスで調べたけどファイルないよ?」とエラーを吐きます。「その関数は使えませんよ?あっエラーログ出しましたよ」とドヤ顔で文字化けしたログを出してくれます。わぁありがたいね…

このような理由から、プログラム内にコメント文以外で日本語を使うと悲しい悲劇が待っています。少なくとも、私はIDEのコマンドライン出力で何度も心をバキバキにされました。どうすればいいんだろうね…もう何もわからない…あのターミナルの文字コードを設定してる場所分からないからどうにもできないよ…

おわりに

我々がコンピュータ上で文字を読むことができるのは文字コードのおかげです。UTF-8くん使ってるはずなのに日本語出てこないのは中々にテロ。

みなさんも文字コードと仲良くなって、文字化けに対して怒らないでください。それはエンコード方式を正しく選ばなかったせいです。 良きコーディングライフを!