文字コードについて【初学者】

#はじめに
文字コードについて調べた内容です。

#文字コードの歴史
文字コードとはコンピュータ上で文字を表現するために割り振ったもの。
初めはアメリカで規格化された1バイトコードのASCII使われた。
しかしASCIIのみでは多様な言語に対応できず、
言語固有の文字コードが次々に作られていった。
現在では互換性の問題を解決するために国際的な文字コードとしてUnicodeができた


#符号化文字集合と文字符号化方式

文字コードには符号化文字集合と文字符号化方式の二つの概念がある。

符号化文字集合とは・・・ざっくりいうと文字の集まりのこと。例えばUnicode、JIS X 0208など。 

文字符号化方式とは・・・文字集合にある文字をビット列で表現したもの。例えばShift-JIS、UTF-8など
（実際には人がわかりやすいように16進数などに変換して使用している。）

また、一つの符号化文字集合に対して複数の文字符号化方式が適応されていたり、逆に二つの符号化文字集合をベースにして作られている文字コード（文字符号化方式）もある。
UnicodeはUTF-8,UTF-16,UTF-32などの文字符号化方式がある。

つまり文字コードとはいっても混同されがちなUnicodeとUTF-8はちょっと違うようだ。
私はズバリ同列で見ていました。

##ちなみに
Windowsのメモ帳を保存するときに文字コードを指定することができます。
その欄にはUTF-8,Unicodeがあって、この場合のUnicodeはUTF-16のことらしい。ややこしいね。





それではそれぞれの文字コード（文字符号化方式）についてです。

#ASCII
- 1バイトコード（うち7ビットで最大128文字を表現）
- 英数字を表現



#UTF-8
- ASCII互換あり（※UTF-16はASCII互換なし）
- Unicode定義された文字集合を表現（多言語）
- ASCII以外の部分を2～6バイトで表現

#Shift-JIS
- ASCII互換あり
- 日本語の符号化方式の一つ
- 1バイト目で半角文字を表現（英数、半角カタカナ、記号など）
- それ以外の全角文字は、2バイトで表現


#ASCIIコード表

| 10進 | 16進 | 文字   | 10進 | 16進 | 文字   | 10進 | 16進 | 文字   | 10進 | 16進 | 文字   |
|------|------|-------|------|------|-------|------|------|-------|------|------|-------|
| 0    | 0    | NULL  | 32   | 20   | SP    | 64   | 40   | @     | 96   | 60   | `     |
| 1    | 1    | SOH   | 33   | 21   | !     | 65   | 41   | A     | 97   | 61   | a     |
| 2    | 2    | STX   | 34   | 22   | "     | 66   | 42   | B     | 98   | 62   | b     |
| 3    | 3    | ETX   | 35   | 23   | #     | 67   | 43   | C     | 99   | 63   | c     |
| 4    | 4    | EOT   | 36   | 24   | $     | 68   | 44   | D     | 100  | 64   | d     |
| 5    | 5    | ENG   | 37   | 25   | %     | 69   | 45   | E     | 101  | 65   | e     |
| 6    | 6    | ACK   | 38   | 26   | &     | 70   | 46   | F     | 102  | 66   | f     |
| 7    | 7    | BEL   | 39   | 27   | '     | 71   | 47   | G     | 103  | 67   | g     |
| 8    | 8    | BS    | 40   | 28   | (     | 72   | 48   | H     | 104  | 68   | h     |
| 9    | 9    | HT    | 41   | 29   | )     | 73   | 49   | I     | 105  | 69   | i     |
| 10   | A    | LF    | 42   | 2A   | *     | 74   | 4A   | J     | 106  | 6A   | j     |
| 11   | B    | VT    | 43   | 2B   | +     | 75   | 4B   | K     | 107  | 6B   | k     |
| 12   | C    | FF    | 44   | 2C   | ,     | 76   | 4C   | L     | 108  | 6C   | l     |
| 13   | D    | CR    | 45   | 2D   | -     | 77   | 4D   | M     | 109  | 6D   | m     |
| 14   | E    | SO    | 46   | 2E   | .     | 78   | 4E   | N     | 110  | 6E   | n     |
| 15   | F    | SI    | 47   | 2F   | /     | 79   | 4F   | O     | 111  | 6F   | o     |
| 16   | 10   | DLE   | 48   | 30   | 0     | 80   | 50   | P     | 112  | 70   | p     |
| 17   | 11   | DC1   | 49   | 31   | 1     | 81   | 51   | Q     | 113  | 71   | q     |
| 18   | 12   | DC2   | 50   | 32   | 2     | 82   | 52   | R     | 114  | 72   | r     |
| 19   | 13   | DC3   | 51   | 33   | 3     | 83   | 53   | S     | 115  | 73   | s     |
| 20   | 14   | DC4   | 52   | 34   | 4     | 84   | 54   | T     | 116  | 74   | t     |
| 21   | 15   | NAK   | 53   | 35   | 5     | 85   | 55   | U     | 117  | 75   | u     |
| 22   | 16   | SYN   | 54   | 36   | 6     | 86   | 56   | V     | 118  | 76   | v     |
| 23   | 17   | ETB   | 55   | 37   | 7     | 87   | 57   | W     | 119  | 77   | w     |
| 24   | 18   | CAN   | 56   | 38   | 8     | 88   | 58   | X     | 120  | 78   | x     |
| 25   | 19   | EM    | 57   | 39   | 9     | 89   | 59   | Y     | 121  | 79   | y     |
| 26   | 1A   | SUB   | 58   | 3A   | :     | 90   | 5A   | Z     | 122  | 7A   | z     |
| 27   | 1B   | ESC   | 59   | 3B   | ;     | 91   | 5B   | [     | 123  | 7B   | {     |
| 28   | 1C   | FS    | 60   | 3C   | <     | 92   | 5C   | \     | 124  | 7C   | |     |
| 29   | 1D   | GS    | 61   | 3D   | =     | 93   | 5D   | ]     | 125  | 7D   | }     |
| 30   | 1E   | RS    | 62   | 3E   | >     | 94   | 5E   | ^     | 126  | 7E   | ~     |
| 31   | 1F   | US    | 63   | 3F   | ?     | 95   | 5F   | _     | 127  | 7F   | DEL   |


#最後に

各文字コードを比較してみました。


| 文字 | ASCII(16進 | Shift_JIS(16進) | UTF-8(16進) | UTF-16(16進) |
|------|------------|-----------------|-------------|--------------|
| a    | 61         | 61              | 61          | 0061         |
| 1    | 31         | 31              | 31          | 0031         |
| ｱ    |            | B1              | EFBDB1      | FF71         |
| あ   |            | 82A0            | E38182      | 3042         |
| 阿   |            | 88A2            | E998BF      | 963F         |