見出し画像

文字コードとはなにか

おはようございます。またはこんにちは。もしくはこんばんわ。マゲっちSCと申します。9月も25日を迎え終盤となりつつありますね。現在は台風が発生しています。秋台風は夏台風とは違い割と早く過ぎていきますが、秋になると太平洋高気圧が南へ下がり勢力も弱くなります。台風は太平洋高気圧のフチを時計回りに移動していきますが、途中で偏西風に乗るとすぐに日本へ到達します。夏は太平洋高気圧が張り出していて台風も遠回りを強いられ、偏西風に乗るまでに時間がかかるため、日本到達までに時間がかかったり迷走したりします。月末には日本へ台風16号が到達する可能性があるため気をつけたいところですね。

さて、前回のブログでは通信プロトコルを深堀りしてポート番号のお話をさせていただきました。現在ではウェブサイトの閲覧やメールのやりとり、SNSの利用に動画の閲覧や投稿、さらにはオンラインゲームのデータのやり取りやソフトウェアの更新など、インターネット回線上は実に様々な情報が24時間行き交っています。使うサービスによってどのポート番号に通信パケットを送ればいいのかが変わってきます。そしてよく使うサービスに関しては世界レベルで標準化されているためウェブシステムを作る側はもちろんですが、使う側もポート番号を特に意識することなく利用できます。また、ポートを開いたり閉じたりすることで特定の通信を遮断することができるファイアーウォールについてもお話しました。情報は盛り沢山でしたが、通信の裏側はこういうふうになっているんだとざっくりと掴んでいただけたら幸いです。ただ、情報処理試験では必須の内容ですので受験される方はきちんと抑えて置かなければなりません。

文字コードとはなにか?

そして標準化されているものは通信プロトコルやポート番号だけではありません。その代表例とも言えるものが文字コードです。世界には実に様々な国と地域がありその国や地域で使用されている言語は多種多様です。また、OSを含めソフトウェアを制作している企業もたくさんあります。それらたくさんの国・地域やソフトメーカーが自分たちの国・地域や企業側の都合で勝手にコンピュータ上での文字の扱いを決めてしまったらどうなるでしょうか?混乱が生じるのは想像に難くないですね。世界のほとんどの国や地域で通用する言語といえば英語です。コンピュータはUSAで開発されました。つまり、コンピュータ上で扱われる標準的な言語は英語と数字と特殊記号になります。コンピュータ上でプログラム言語を使って何かしらのソフトやシステムを制作する場合に人間側がわかるためのソースコードを記述するために使用する言語は基本的に英単語です。プログラムに関してはこちらでお話させていただいております。

ですが、英語を国や地域の標準言語として採用している、いわゆる英語圏の国は実に70カ国を超えます。他にもフランス語圏の国やスペイン語圏の国、ポルトガル語圏の国もアジアやアフリカや南米へ行けば何カ国もあります。さらには中国語や韓国語、日本語、ロシア語、ギリシャ語など使用されている国や地域は少ないけれども世界的に知られている言語もあります。また計算に用いる数字と特殊記号もあります。みなさんのキーボードを見ていただくとわかると思いますが、キーボードは本来コンピュータに何らかの指示を出すための入力装置です。文字での入力なのでもちろん入力した信号を文字として扱うこともできます。そして、キーボードにある文字・数字・特殊記号はプログラミングやハッシュタグなど使用する頻度の高いものがキーとして搭載されています。そうしないと不便だからです。

かつてインターネットがなかった時代、コンピュータはメーカーが独自にOSを作り、自分たちで組み立てたハードウェアに対してOSをインストールし販売していました。例えば日本ではNECや富士通がPCメーカーの老舗として有名ですがNEC製のPCと富士通製のPCでは一部の文字コードが違っており、表示できる文字とできない文字、とりわけ特殊記号や特殊文字の一部が共有できませんでした。同じ日本語を扱っているのに一部の特殊文字や特殊記号がメーカーが違う(つまりはOSが違う)だけで表示されないという不具合が発生します。これが全世界レベルで起きると大変なことになりますし、そもそもコンピュータなど使う必要がなくなってしまいます。

文字コードの種類とは

そこで文字コードを作ってコンピュータ上で扱える文字や数字や特殊記号を標準化しようということになります。文字を画像として取り扱うのであれば文字コードは必要ないのですが、コンピュータに何らかの司令を与える場合、標準化していないとメーカーやOSごとに違う文字がコンピュータに入力される恐れがあります。ユーザには文字として表示されますがコンピュータ上では数値であり、数値は司令としてコンピュータに扱われる場合があります。標準化されていない場合意図しない司令がコンピュータで実行されてしまいとんでもない損害を生む可能性もあります。現在ではASCIIコードやEBCDIC、EUC(拡張UNIXコード)、Shift-JISコードなどがあります。日本で使用されているものはASCIIコード、EBCDIC。ISO/IECコード、EUC-JP、UnicodeであるUTF-8も有名ですね。だいたいこのくらいを抑えておけば大丈夫だろうと思います。そしてキーボードにある英数字や特殊記号は本来は1バイト、つまり半角で扱うこともできる文字ですが、Unicodeではすべての文字を2バイト文字として扱います。2バイト文字とは全角で表現される文字のことですべての文字や数字・特殊記号を2バイト文字として扱います。文字をすべて2バイトで統一することで全世界の文字を扱いやすくなります。

現在皆さんが扱っているコンピュータには実に様々な文字コードが収録されていて、ユーザ側が特に意識することなく普通に文字を入力し、それを様々なコンピュータから閲覧できます。そのときに文字が読めないということはほぼないはずです。しかし、場合によっては文字がおかしくなることがあります。この現象を文字化けと呼びます。ウェブブラウザでは文字化けが起きた場合は各ブラウザごとに解決方法があります。ほとんどの場合はテキストエンコードがUnicodeのUTF-8以外になっていることで起きていますので、テキストエンコードをUTF-8に変更することで文字化けを修正できます。

絵文字と顔文字

文字ということで皆さんが気になるのがやはり、最近流行りの絵文字ではないでしょうか?そもそも絵文字とは何でしょう?似たようなものに顔文字があります。まず顔文字についてですが、これはいくつかの文字や数字・特殊記号を組み合わせて顔の表情のように表現したものです。例えば「(^ー^)」や「(^o^)」などです。絵文字は文字として扱われる絵です。「😩」や「🎨」などですね。スマホで入力して文章のアクセントに使う方もたくさんいらっしゃると思いますが、WindowsPCでも「えもじ」と入れて変換していくことで呼び出すことができます。私はブログをスマホから更新することはありませんので、例で使用した絵文字はWindowsPCで変換して出したものになります。

外字とは

本来であれば文字として扱わないような特殊な文字記号のことを外字と呼びます。読んで字のごとく最初からコンピュータには備わっていない文字です。例えば絵文字もそうですが外という字を◯で囲んで⑧のように扱いたいとします。しかし、そのような文字はコンピュータの変換辞書内にはもちろんですが文字コードとしても存在していません。つまり新しく作成する必要があります。そのときWindows10では外字エディタを使用することで外を◯で囲んだ文字をデザインし、空いている文字コードに新規作成した文字を登録することでワープロソフトや表計算ソフト、テキストエディタなどで表示が可能になります。ただし注意すべきなのは他のコンピュータであなたが個人的に作成した外字を表示できない可能性が高いということです。また、外字登録した文字を日本語入力ソフト(ATOKやGoogle 日本語入力など)で変換できない可能性もあります。MS-IMEはWindowsについているものなので変換することはできるはずです。外字は日本語入力ソフトに登録するものではないためです。

変換辞書登録とは

変換辞書とは日本語変換ソフトの機能の一部です。日本語入力ソフトとは入力された2バイトの英字を日本語に変換して画面に表示します。コンマやピリオドが入力された場合はコンマを読点に、ピリオドを句点に変換します。数字や特殊記号も基本的には2バイトで表示します。英字は母音はそのまま「あいうえお」に変換されますが、子音は2バイトの英字として表示します。日本語は子音1つに対して母音1つが合わさってできていますので、例えば「DA」と入力すると「だ」と自動変換されて画面に表示されます。外字エディタと変換辞書登録は全然違います。外字エディタはもともとシステムにない文字をユーザが作成してシステムに登録します。ですが、システムにもともとない文字ですから、他人が使っているコンピュータ上でユーザが作成した外字が表示できる可能性は低いはずです。変換辞書登録とはもともとシステム上にある文字同士を組み合わせて、新たな単語として日本語変換ソフトに登録することをいいます。よく人名であると思うのですが、変換しても出ない組み合わせの文字で構成された人名の場合事前に変換辞書登録をしておくと漢字変換が楽になります。またもともとシステムにある文字同士を組み合わせているのでどの端末でも文字がきちんと画面に表示されます。

絵文字について

では絵文字と顔文字、そして外字登録と変換辞書登録の違いがわかったところで絵文字のお話をしていきます。もともと絵文字は外字扱いでした。絵文字の文化が根付くまでは英数字・特殊文字・ひらがな・カタカナ・常用漢字・ロシア文字・ギリシャ文字・中国語の漢字にハングル文字あたりが日本語のPC環境ではよく目にする文字だと思います。しかしそれらはすでにPCのOS内に文字として文字コード上で管理されています。絵文字も2021年現在ではPCやスマホなどのシステム上に登録されていますが、もともとは日本で使われていた携帯電話に搭載された特殊文字でした。1995年頃に使用されていたポケベルの中にハートマークを表示する文字コードが登録されており、「88」や「89」を入力すると相手の画面に「♥」として表示されるというわけです。それから時代は進み1999年に携帯電話でひらがな・カタカナ・漢字を扱うことが可能な端末が登場します。いわゆるガラケーのご先祖様ですね。そこではハートマーク以外にも笑顔や音符などの絵のような文字を入力できたわけです。2010年以降外国でも日本の絵文字がかわいいということで絵文字が徐々に認知され始めていき、PCやスマホのOSに標準化された文字としてシステム状に登録されるようになりました。2021年現在では日本発祥のかわいい文字ということで外国でも普通に使用されています。

外国でも顔文字は使われていましたが、日本語の場合は(^ー^)のように表記してそのまま読みます。しかし外国では「:D」のように表記します。日本語のように横から見るのではなく縦に変換して見ます。「:D」であれば「:」が両目で「D」が開いた口です。ただ分かりづらいですよね。そこに絵文字が搭載されたPCやスマホが出回ったわけです。わかりやすい表情やかわいらしい文字のデザインや色彩はあっという間に世界を席巻し、今や「emoji」で通用するレベルになっています。エンジニアの方がおっしゃるには絵文字を外字として登録し文字コードを各OSで標準化しているそうです。つまりWindowsPCでもMacでもiOSでもAndroidでも変換辞書で変換でき同じ絵文字として表示されるわけです。文字コードで標準化されているので赤いハートであればどの端末から見ても赤いハートとして表示されます。

半角カタカナについて

日本語には古くからひらがな・カタカナ・漢字があります。どれも2バイト文字で表示されるものですが、カタカナに関しては半角で表示できます。ですが、「半角カタカナは使用するな」と言われた経験がある方もたくさんいらっしゃると思います。というのも昔はUnicodeが存在しておらずコンピュータの性能上漢字が使用できないという側面もあり、半角カタカナを使って漢字の部分を表現していたそうです。コンピュータの性能が上がって漢字が使用可能になりました。その時点でもひらがな・全角カタカナ・漢字を一つ文字集合として扱っていましたが、半角カタカナはその文字集合には入っていませんでした。つまり半角カタカナを使用した場合最悪サーバプログラム上で正常に扱うことができず、サーバダウンの原因になることもありました。インターネット黎明期では電子メールでは半角カタカナは使用できないということもあり敬遠されることとなりました。しかし、Unicodeが一般化した現在においては文字集合の中に半角カタカナも登録されており、使用してもサーバプログラム等に影響を与えることがほぼなくなったため表現の一環として受け入れられるようになりました。ただし完全に誤動作を起こさなくなったわけではありません。システムによっては使用禁止になっている現状もありますし、電子メールで使用した場合は文字化けを引き起こす原因になることもあります。半角カタカナを使用して文字化けを引き起こした場合は元の文字に変換不可能な場合もあるようです。

まとめ

このように文字はコンピュータ・システム上で使用しても混乱を来さないために文字コードによって管理されています。文字コードの種類もいくつかありますが、現在ではほぼUnicodeで使用することが増えているようですね。今やコンピュータ・システムのメモリやストレージの容量は一昔前では考えられないような大容量となり、1バイトでも2バイトでも文字に関しては容量にあまり影響を与えなくなってきたのでしょう。では次回のブログですが標準化されているものはたくさんあれども、これを忘れてはいけません。そう、拡張子です。コンピュータ上では非常に多くの種類のデータを扱います。ですがコンピュータはそのデータが何のデータであるか判別できません。拡張子はその手助けをしてくれます。また、ユーザ側も拡張子を知ることでこれはどんなデータなのかが簡単に判別できるようになり非常に便利です。ご興味がありましたらまたお立ち寄りください。それでは失礼いたします。

この記事が気に入ったらサポートをしてみませんか?