1.文字コードとは

コンピュータは漢字やひらがなをそのまま理解することはできません。そこで、漢字やひらがななどの文字を、01データで表す変換が必要になります。この対応のことを文字コードと言います。
文字コードにはいくつかの種類がありますが、たとえば、JISコードの変換表(一部)をみてみましょう。

f:id:mamori_yuto:20181101134016j:plain

■JISコード表(抜粋)

たとえば、ひらがなの「あ」のJISコードは、上記の表から「2224」、「い」であれば「2424」です。
ひらがなカタカナ以外にも、アルファベット、数字、記号なども対応が決められています。

2.さまざまな文字コード

文字コードは1種類ではありません。応用情報技術者試験のシラバスでは、文字コードに関して以下の記載があります。
(3)文字の表現
代表的な文字コードを理解する。
用語例 ASCII コード,EUC(Extended UNIX Code:拡張UNIX コード),JIS コード,シフトJIS コード,Unicode,UCS
このように、いくつかの種類があります。また、先ほどの「あ」ですが、JISコードでは「2422」でしたが、シフトJISでは「82A0」、EUC-JPでは「A4A2」と、文字コードが違えば、全く違うコードになります。

f:id:mamori_yuto:20181027120215j:plain
なるほど!
それで、文字コードが違うと、全く違う文字になって文字化けするのですね。
そうです。では、具体的な文字コードを見ていきましょう。
平成18年 午前 問55を参考にすると、以下のようになります。
①ASCII(American Standard Code for Information Interchange)
ANSI(アメリカの規格団体。日本でいうJIS)
全ての文字を1バイトで表現する。
1バイトなので、漢字は表現できない。
※実際にはわずか7ビット(=128文字)

具体的に考えましょう。1バイトなので8ビットです。
0000 0000 からはじまり、最後は1111 1111 までです。
いくつかの例を紹介します。

文字    16進数表記     2進数表記
0        30(0x30)     0011 0000
1        31(0x31)     0011 0001
a        61(0x61)     0110 0001
b        62(0x62)     0110 0010
LF       0a(0x0a)     0000 1010
CR       0d(0x0d)     0000 1101
-        2d(0x2d)     0010 1101
.        2e(0x2e)     0010 1110

ASCII文字コードを使ったURLエンコーディングに関しては、以下に記載しています。
http://sc.seeeko.com/archives/4711381.html

②EUC(Extended Unix Code)
・UNIXを中心に普及している複数バイトからなるコードで、漢字も表現できるもの(平成16年 問50)
・英数字は1バイト、漢字は2バイト(H17共通39)

③Unicode または UCS
・万国共通の文字コード
・すべての文字を2バイトで表現するコード体系であり、多くの国の文字体系に対応できる。(H17共通39)
・UCS-2 (Universal multi-octet coded Character Set)とUCSは厳密には別物であるが、UnicodeはUCSの一部であり、同じと考えてよいだろう。
過去問では、「すべの文字を2バイトで表現するコード体系であり、多くの国の文字体系に対応できる(H20AN午前40)」と述べられており、Unicodeと同じ表現になっている。

④シフトJIS
1バイト目がASCIIコードと重複しないようにSHIFT(ずらす)

3.文字コードに関する過去問

問4 UTF-8の説明に関する記述として,適切なものはどれか。
ア 1文字を1バイトから4バイト(又は6バイト)までの可変長で表現しており,ASCIIと上位互換性がある。
イ 2バイトで表現する領域に収まらない文字は,上位サロゲートと下位サロゲートを組み合わせて4バイトで表現する。
ウ ASCII文字だけを使用することが前提の電子メールで利用するために,7ビットで表現する。
エ 各符号位置が4バイトの固定長で表現される符号化形式である。





【正解】ア