残像ブログ

残像だった

UnicodeとかUTF-8とかShift_JISとか色々複雑なので自メモ

下記の書籍を参考にしてます
この記事内の記述には私の理解不足により誤りがある可能性があるので、こちらの本を読むのがとてもおすすめ

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

プログラマのための文字コード技術入門 (WEB+DB PRESS plus) (WEB+DB PRESS plusシリーズ)

そもそも文字コードとは

任意の文字を重複無く集めたものを文字集合という

その文字集合とビット組み合わせを対応付けたものを文字コードまたは符号化文字集合という

文字コードは収録している文字の種類・数、ビット組み合わせの桁数などの違いがある
ASCII、JIS X 0208Unicodeなどが文字コードにあたり、それぞれの特徴は以下の通り

文字コード 説明 ビット桁数
ASCII 英数字と一部の記号のみを収録した基礎的な文字コード 7ビット単位の1バイト
JIS X 0208 日本語で使用される主な文字を収録した文字コード。漢字はJIS第1・第2水準漢字が収録されている 7ビット単位の2バイト
Unicode 全世界の文字の収録を目的とした文字コード。2バイト 作成当初は16ビットだったが、今は8ビット単位の1〜4バイト

UTF-8Shift_JIS文字符号化方式

UTF-8Shift_JISなどは上記参考資料では「文字符号化方式」と呼ばれています
文字符号化方式は、文字コードのビット組み合わせに対して、計算などによってビット値を与える
文字コードでもうビット組み合わせが定義されてるんだからそのまま使えばいいじゃん!!!!と思うところだが(実際ASCIIなどは文字コードのビット組み合わせをそのまま使う)、そうも行かない場合がある。その場合とは

などがあるらしい

複数の文字コードを組み合わせて使う場合

たとえばJIS X 0208は英数字も収録された文字コードだが、先発のASCIIとの後方互換を保つためには、1バイトの文字は1バイト、2バイトの文字は2バイトで表現できなければならない
そのためにJIS X 0208とASCIIを同時に使えるように符号化方式が必要になる

文字コードUnicodeの場合

Unicodeは作成当初はビット組み合わせの桁は16ビットだったが、それでは世界中の文字を収録しきれない事が判明したため桁数を増やさなければならなくなった
そのため、従来の16ビットのUnicode後方互換を保つ為には符号化方式を使用してビット値を与える必要ができた

まとめ

Unicode 文字コード
UTF-8 Unicode」という文字コードのビット値を計算する方式
Shift_JIS JIS X 0208」という文字コードのビット値を計算する方式