読者です 読者をやめる 読者になる 読者になる

感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

文字コードのまとめ。

Python
<スポンサーリンク>

「みんなのPython」は文字コードについても詳しく説明してくれていた。
自分なりにまとめてみる。

文字コードって何?と言われると、「文字コード文字集合に対し数字を割り当てたものだよ」と言える。
文字集合は何?と言われると、英字や数字のような文字を集めたものだ。

Aなら65、aは97のように。文字に対しては数字が割り当てられていて、コンピュータは基本的に文字を数字に置き換えて記録している。
文字と数値をお互いに変換するためのルールを「エンコード」と呼ぶ。

エンコードには色々ある。
本に書いてある順番に見ていこう。

ASCIIエンコード

ASCIIは「American Standard Code for Infomation Interchange」の略。
空白や改行のような制御文字も含め、128種類の文字に対応する数字が決められている。
128種類って少ないよね?

そう、少ないから、今度はヨーロッパでよく利用される文字のうちASCIIが持っていない文字を追加した「ISO 8859」というエンコードが作られた。

ISO8859は文字を表記するための数値の範囲をASCIIの7ビットから8ビットで扱える255まで拡張した。
ASCIIやISO 8859では文字1文字が1バイトになる。
文字列の文字数を数えるためには、文字列のバイト数を数えればいい。

ヨーロッパではISO 8859がよく使われていて、中でもISO 8859-1と呼ばれるエンコード方式が最もよく使われている。
ISO 8859-1はLatin-1とも呼ばれる。
ん?Latin-1ってどっかで見たことある気がする。どこだったっけ?

中国語や韓国語、日本語などの漢字文化圏では、とても多くの文字を使う。
255種類などではとても表しきれない。

ではどうするか?
1バイトを2つ組み合わせて、2バイトの1つの数値をして扱う。
そうすると、256 * 256 = 65536種類の文字が扱える。

1文字を複数のバイトで表現するため、このようなエンコードで表現された文字をマルチバイト文字と呼ぶ。
一方、ASCIIやISO 8859などは1バイト文字と呼ばれる。

日本語表記に使われるエンコードには以下の様なものがある。

2バイトで漢字やひらがなを含む広範囲の文字を表現するエンコード

  • ISO-2022-JP

日本のインターネットの前身となったJUNETで考案されたエンコード

UNIXLinuxで標準的に利用されてきたエンコード

ユニコードをベースにしたエンコードで、標準として利用される。

<mata charset="utf-8">

は基本だと思う。
英字やひらがな、漢字、韓国語など広い範囲で文字を統一的に扱える魔法のようなエンコード