文字コードを勉強してみた。
はじめに
文字コードについては今まで何となくで扱っていたのですが、お仕事で基礎から学ぶ機会があったので備忘録としてまとめていきたいと思います。
符号化文字集合と文字符号化方式
文字コードは以下の2段階へ区別できます。
符号化文字集合
単純に言うと文字の種類。人間が読める文字たちを集めたもの。
文字符号化方式
符号化文字集合をコンピュータが読める形にしたもの(いわゆる2進数の世界)。
文字コード一覧
上記をふまえた上で文字コードの一覧を見てみると、一般的に文字コード
と言われていても中身は符号化文字集合と文字符号化方式に分かれていることが分かります。
符号化文字集合 | 文字符号化方式 | 備考 |
---|---|---|
ASCII | ASCII | 半角英数字記号 |
Shift_JIS | Shift_JIS | 日本語等の全角文字を扱えるようにした文字コード ASCII範囲は符号化文字集合と文字符号化方式が同じ |
Unicode | UTF-8 | 文字によってデータサイズが可変 ASCII文字などは1文字8ビットになるし日本語等は16ビット、24ビットなど変わったりする |
Unicode | UTF-16 | 基本的には1文字を16ビット固定で表すが、例外として1文字32ビットのものもある(サロゲートペア) |
Unicode | UTF-32 | 1文字を32ビット固定で作成 |
何気なく文字コードはUTF-8とかUnicodeとか言ったりしていましたが、実はUTF-8はUnicodeの文字符号化方式だったんですね。
Shift_JISとCP932
上記の表で重要なのが、Windowsで扱っているShift_JIS
は正確には一般的なShift_JIS
とは違うということです。
Windowsは一般的に言われているShift_JIS
を勝手に拡張したCP932というものを用いています(日本では)。
Windowsで文字変換をしていると以下のような「環境依存」という表記を見ますが、これがいわゆるCP932
です。
Shift_JISを扱う上での注意点
例えばデータ連携などの案件で「文字コードはShift_JISで!」となった場合、お互いにWindows系のシステムだったら問題はない可能性が高いですが、Windows - Linuxなどの連携システムだった場合はLinux側に扱えない文字が入ってくる可能性が出てきます(Windows側はShift_JISのつもりでも実はCP932だったりするから)。
例)上記写真のような「德」の字がLinux側に連携されて文字化けしてしまう...等
おわりに
まだまだ全然書き足りないですが、たくさん書くのは面倒 長すぎても読むのが疲れると思うのでまた続きは別の記事で書いていきたいと思います。