先日トレンドに上がっていたとっても面白い記事がありました。
実はWindowsではキーボード右上の「¥」と右下の「\」キーどちらを押しても「\」が入力されているんだけど、画面には偽装された「¥」が表示されている。という記事。
プロンプトの区切り文字とかはWindowsなら「¥」、Linuxなら「\」だよなーと、特に意識もせずに使っていたけどこんな背景があったとは知りもしませんでした。
んで、ちょっとだけ文字コードって面白くない?って思ったので勉強してみることにしました。
文字コードってよくわからん。
普段文字コードを意識する機会といえば文字化けが起きたときぐらい。
ただ、その時もなんかよくわかんないけど使ってるアプリの「文字コード 変更」みたいにGoogle先生に聞いて、「UTF-8」とか「Shift-JIS」とかにガチャガチャしてたらよくわからんけどなんか直った。みたいな思い出しかない。
とりあえず3種類覚えておけば良さそう。
そもそも文字コードってのは2進数と文字の対応表で、世界初の文字コードの「ASCII(アルファベットと数字といくつかの記号(合計127文字))」をベースに各国がそれぞれ使いたい文字を足したりして独自の文字コードができて、さらにそれを改良して、、といった具合に発散してきた背景があるみたいです。
ただ、1つの文字コードで全世界の文字を表現しよう!って動きもあるみたいで、統一の規格として「Unicode」が開発されています。まあなんとなく察していますが、互換性の問題で移行できなかったりで昔から使われてる文字コードが残ってたりするので「Unicode」だけ知ってればいいともならなそうです。
また、日本語を表現するのに特化した文字コードもあり、それが「Shift-JIS」です。
ASCII VS Unicode VS Shift-JIS
ASCII
- 7ビットで表現され、128文字を扱う。
- 英語アルファベット、数字、一部の特殊文字などが含まれる。
- ASCIIは主に英語に焦点を当てており、他の言語や記号に対応していない。
- 32ビットで表現され約21億文字を扱う。
- 世界中のほぼすべての文字体系や記号を含む。
- 文字のみでなく絵文字にも対応している。
Shift-JIS
- 8ビットと16ビットで表現される文字があり、8ビット表現では256文字、16ビット表現では約6000文字を扱う。
- アルファベットは8ビットで表現し、ひらがなや漢字など多くの日本語文字は16ビットで表現する。(Unicodeでは日本語文字を表現するために32ビット必要)
- 日本語文字を効率的に表現するための仕組み
「UTF-8」は出てこないの?
とりあえず調べた感じ、上記の3種類を覚えておけば文字コードは戦えそうです。
あとは「UTF−8」という仕組みを覚えておけば、、、
「UTF-8」は文字コードではなくて文字エンコーディング方式だそうです。
よくわかりませんね笑
というかとっても調べたけどこれに関してはよくわからなかった。
「UTF-8」は可変長エンコーディング方式だから基本的な英語の文字は1バイトで表現、一部の言語や特殊な文字は2バイト、3バイト、または4バイトが必要です。これにより、テキストデータを効率的に扱える。とか書いてあるけど、UnicodeからさらにUTF-8にエンコーディングする必要性がいまいちわからなかった。
のでここは継続して勉強します。
一旦、ここまでで
あとから追記します。