ASCII (American Standard Code for Infomation Interchange)は 最上位ビットを使用せず、7ビットの範囲(0x00-0x7F)で表現していました。 日本ではこれに最上位ビットも使用し8ビットの範囲(0x00-0xFF)とし、 独自にカタカナを押し込めました。
これは慣例的に使われていたに過ぎなかったのですが、やがて「ANKコード」 (Alphabet, Numerical digit, Katakana) と呼ばれ広く使われるようになり、1969年に 「JIS X 0201」 として正式に定義されました。
Shift_JIS系では1バイト文字に関しては「ANKコード」の文字コード値をそのまま使用しています。 そして「ANKコード」の1バイトの「カタカナ」を、Shift_JIS系では「半角カナ」とし、別途2バイトの「(全角)カタカナ」を追加しました (EUC-JPやUTF-8でも「半角カナ」は定義されましたが、文字コード値は異なります)。
一方で全ての文字を7ビットで扱うことを前提としている 「ISO-2022-JP」では 「半角カナ」は定義されていません。しかし独自にサポートしているアプリケーションも多数存在します。
メールのプロトコルSMTPはRFC 5322で、 メッセージで使える文字列はUS-ASCII文字(7bit文字)のみと定められています。 そのため、日本語を含むメールでは7ビットで表現することを前提にしている「ISO-2022-JP」が多用されました。 また「ISO-2022-JP」を独自に拡張し、最上位ビットも使用して、半角カナをサポートするメーラーもありました。
しかし、最上位ビットの扱いは任意となっており、 送信時に8ビット目をクリアしてしまうメーラーや、 中継サーバーで8ビット目をクリアしてしまうことがあったり、 受け取っても半角カナは表示しないメーラーもあり、 とにかく半角カナを使用したメールは文字化けをすることがありました。 そのため「メールを送信する際は半角カナは禁止」とされていたのです。
「半角カナ」を「機種依存文字」としている説明をたまに見かけます。 これはメールや「ISO-2022-JP」に限定して言えば正しいです。 しかし半角カナがWebでも化けるとか、半角カナが全般的に 機種依存文字であるかの様な説明は明らかに間違いです。
下位4ビット | ||||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |||
上 位 4 ビ ッ ト | 00 | NUL | SOH | STX | ETX | EOT | ENQ | ACK | BEL | BS | HT | LF | VT | FF | CR | SO | SI | |
10 | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | EM | SUB | ESC | FS | GS | RS | US | ||
20 | SP | ! | " | # | $ | % | & | ' | ( | ) | * | + | , | - | . | / | ||
30 | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | ||
40 | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | ||
50 | P | Q | R | S | T | U | V | W | X | Y | Z | [ | \ | ] | ^ | _ | ||
60 | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | ||
70 | p | q | r | s | t | u | v | w | x | y | z | { | | | } | ~ | DEL | ||
80 | ||||||||||||||||||
90 | ||||||||||||||||||
A0 | 。 | 「 | 」 | 、 | ・ | ヲ | ァ | ィ | ゥ | ェ | ォ | ャ | ュ | ョ | ッ | |||
B0 | ー | ア | イ | ウ | エ | オ | カ | キ | ク | ケ | コ | サ | シ | ス | セ | ソ | ||
C0 | タ | チ | ツ | テ | ト | ナ | ニ | ヌ | ネ | ノ | ハ | ヒ | フ | ヘ | ホ | マ | ||
D0 | ミ | ム | メ | モ | ヤ | ユ | ヨ | ラ | リ | ル | レ | ロ | ワ | ン | ゙ | ゚ | ||
E0 | ||||||||||||||||||
F0 |
ちなみにMSXでは、さらに「0x80-0x9F」と「0xE0-0xFF」に、ひらがなと トランプマークなどの記号を押し込め、右画像のような文字セットにしていました (画像はMSXのエミュレーターで作成しました)。
「ANKコードのMSX独自拡張」とも言えるでしょう。 ひらがなの位置に注目すると、残り少ない空き領域に詰め込んだ様子が伺えます。
私は小学生の頃にMSXを使っていてその頃は全く気にしていませんでしたが、 今思うとカタカナとひらがなも1バイトで表現できるよう工夫されていたのは印象的です。
MSXはさらに、0x00~0x1Fの制御文字の範囲を、「グラフィック文字」として使い 簡単な漢字や罫線などを割り当てました。少々やりすぎにも感じますが、 少ないリソースでより多くの表現を行おうと工夫していた様子がうかがえます。
ASCIIは記号が4ヶ所に別れて配置されています。一見分かりにくいのですが、 「0x20-0x3F」「0x40-0x5F」「0x60-0x7F」の大きく3つのエリアに分けると、意図を感じることが出来ます。
「0x20-0x3F」は数字と記号の一部で、記号も算術記号や数字に関連するものが多いです。 「0xA0-0xBF」は半角カナの前半です。
左右の表に対応する文字のビットの違いは最上位ビットだけです。よって、メールで半角カナを使用し、 最上位ビットがクリアされることにより文字化けが発生したのなら、 隣の表の対応する文字に化けている可能性が高いです。
文字 | 16進 | 10進 | 2進 | 文字 | 16進 | 10進 | 2進 | |
---|---|---|---|---|---|---|---|---|
SP | 0x20 | 32 | 00100000 | 0xA0 | 160 | 10100000 | ||
! | 0x21 | 33 | 00100001 | 。 | 0xA1 | 161 | 10100001 | |
" | 0x22 | 34 | 00100010 | 「 | 0xA2 | 162 | 10100010 | |
# | 0x23 | 35 | 00100011 | 」 | 0xA3 | 163 | 10100011 | |
$ | 0x24 | 36 | 00100100 | 、 | 0xA4 | 164 | 10100100 | |
% | 0x25 | 37 | 00100101 | ・ | 0xA5 | 165 | 10100101 | |
& | 0x26 | 38 | 00100110 | ヲ | 0xA6 | 166 | 10100110 | |
' | 0x27 | 39 | 00100111 | ァ | 0xA7 | 167 | 10100111 | |
( | 0x28 | 40 | 00101000 | ィ | 0xA8 | 168 | 10101000 | |
) | 0x29 | 41 | 00101001 | ゥ | 0xA9 | 169 | 10101001 | |
* | 0x2A | 42 | 00101010 | ェ | 0xAA | 170 | 10101010 | |
+ | 0x2B | 43 | 00101011 | ォ | 0xAB | 171 | 10101011 | |
, | 0x2C | 44 | 00101100 | ャ | 0xAC | 172 | 10101100 | |
- | 0x2D | 45 | 00101101 | ュ | 0xAD | 173 | 10101101 | |
. | 0x2E | 46 | 00101110 | ョ | 0xAE | 174 | 10101110 | |
/ | 0x2F | 47 | 00101111 | ッ | 0xAF | 175 | 10101111 | |
0 | 0x30 | 48 | 00110000 | ー | 0xB0 | 176 | 10110000 | |
1 | 0x31 | 49 | 00110001 | ア | 0xB1 | 177 | 10110001 | |
2 | 0x32 | 50 | 00110010 | イ | 0xB2 | 178 | 10110010 | |
3 | 0x33 | 51 | 00110011 | ウ | 0xB3 | 179 | 10110011 | |
4 | 0x34 | 52 | 00110100 | エ | 0xB4 | 180 | 10110100 | |
5 | 0x35 | 53 | 00110101 | オ | 0xB5 | 181 | 10110101 | |
6 | 0x36 | 54 | 00110110 | カ | 0xB6 | 182 | 10110110 | |
7 | 0x37 | 55 | 00110111 | キ | 0xB7 | 183 | 10110111 | |
8 | 0x38 | 56 | 00111000 | ク | 0xB8 | 184 | 10111000 | |
9 | 0x39 | 57 | 00111001 | ケ | 0xB9 | 185 | 10111001 | |
: | 0x3A | 58 | 00111010 | コ | 0xBA | 186 | 10111010 | |
; | 0x3B | 59 | 00111011 | サ | 0xBB | 187 | 10111011 | |
< | 0x3C | 60 | 00111100 | シ | 0xBC | 188 | 10111100 | |
= | 0x3D | 61 | 00111101 | ス | 0xBD | 189 | 10111101 | |
> | 0x3E | 62 | 00111110 | セ | 0xBE | 190 | 10111110 | |
? | 0x3F | 63 | 00111111 | ソ | 0xBF | 191 | 10111111 |
「0x40-0x5F」はアルファベット大文字と記号の一部です。 「0xC0-0xDF」は半角カナの後半です。
文字 | 16進 | 10進 | 2進 | 文字 | 16進 | 10進 | 2進 | |
---|---|---|---|---|---|---|---|---|
@ | 0x40 | 64 | 01000000 | タ | 0xC0 | 192 | 11000000 | |
A | 0x41 | 65 | 01000001 | チ | 0xC1 | 193 | 11000001 | |
B | 0x42 | 66 | 01000010 | ツ | 0xC2 | 194 | 11000010 | |
C | 0x43 | 67 | 01000011 | テ | 0xC3 | 195 | 11000011 | |
D | 0x44 | 68 | 01000100 | ト | 0xC4 | 196 | 11000100 | |
E | 0x45 | 69 | 01000101 | ナ | 0xC5 | 197 | 11000101 | |
F | 0x46 | 70 | 01000110 | ニ | 0xC6 | 198 | 11000110 | |
G | 0x47 | 71 | 01000111 | ヌ | 0xC7 | 199 | 11000111 | |
H | 0x48 | 72 | 01001000 | ネ | 0xC8 | 200 | 11001000 | |
I | 0x49 | 73 | 01001001 | ノ | 0xC9 | 201 | 11001001 | |
J | 0x4A | 74 | 01001010 | ハ | 0xCA | 202 | 11001010 | |
K | 0x4B | 75 | 01001011 | ヒ | 0xCB | 203 | 11001011 | |
L | 0x4C | 76 | 01001100 | フ | 0xCC | 204 | 11001100 | |
M | 0x4D | 77 | 01001101 | ヘ | 0xCD | 205 | 11001101 | |
N | 0x4E | 78 | 01001110 | ホ | 0xCE | 206 | 11001110 | |
O | 0x4F | 79 | 01001111 | マ | 0xCF | 207 | 11001111 | |
P | 0x50 | 80 | 01010000 | ミ | 0xD0 | 208 | 11010000 | |
Q | 0x51 | 81 | 01010001 | ム | 0xD1 | 209 | 11010001 | |
R | 0x52 | 82 | 01010010 | メ | 0xD2 | 210 | 11010010 | |
S | 0x53 | 83 | 01010011 | モ | 0xD3 | 211 | 11010011 | |
T | 0x54 | 84 | 01010100 | ヤ | 0xD4 | 212 | 11010100 | |
U | 0x55 | 85 | 01010101 | ユ | 0xD5 | 213 | 11010101 | |
V | 0x56 | 86 | 01010110 | ヨ | 0xD6 | 214 | 11010110 | |
W | 0x57 | 87 | 01010111 | ラ | 0xD7 | 215 | 11010111 | |
X | 0x58 | 88 | 01011000 | リ | 0xD8 | 216 | 11011000 | |
Y | 0x59 | 89 | 01011001 | ル | 0xD9 | 217 | 11011001 | |
Z | 0x5A | 90 | 01011010 | レ | 0xDA | 218 | 11011010 | |
[ | 0x5B | 91 | 01011011 | ロ | 0xDB | 219 | 11011011 | |
\ | 0x5C | 92 | 01011100 | ワ | 0xDC | 220 | 11011100 | |
] | 0x5D | 93 | 01011101 | ン | 0xDD | 221 | 11011101 | |
^ | 0x5E | 94 | 01011110 | ゙ | 0xDE | 222 | 11011110 | |
_ | 0x5F | 95 | 01011111 | ゚ | 0xDF | 223 | 11011111 |
「0x60-0x7F」はアルファベット小文字と記号の一部です。「0xE0-0xFF」は使われていません。
「0x40-0x5F」と「0x60-0x7F」のグループはそれぞれ、日本語キーボード上は 同じキーに割り当てられており、Shiftキーを押すか押さないかの関係にあります。
文字 | 16進 | 10進 | 2進 | 文字 | 16進 | 10進 | 2進 | |
---|---|---|---|---|---|---|---|---|
` | 0x60 | 96 | 01100000 | 0xE0 | 224 | 11100000 | ||
a | 0x61 | 97 | 01100001 | 0xE1 | 225 | 11100001 | ||
b | 0x62 | 98 | 01100010 | 0xE2 | 226 | 11100010 | ||
c | 0x63 | 99 | 01100011 | 0xE3 | 227 | 11100011 | ||
d | 0x64 | 100 | 01100100 | 0xE4 | 228 | 11100100 | ||
e | 0x65 | 101 | 01100101 | 0xE5 | 229 | 11100101 | ||
f | 0x66 | 102 | 01100110 | 0xE6 | 230 | 11100110 | ||
g | 0x67 | 103 | 01100111 | 0xE7 | 231 | 11100111 | ||
h | 0x68 | 104 | 01101000 | 0xE8 | 232 | 11101000 | ||
i | 0x69 | 105 | 01101001 | 0xE9 | 233 | 11101001 | ||
j | 0x6A | 106 | 01101010 | 0xEA | 234 | 11101010 | ||
k | 0x6B | 107 | 01101011 | 0xEB | 235 | 11101011 | ||
l | 0x6C | 108 | 01101100 | 0xEC | 236 | 11101100 | ||
m | 0x6D | 109 | 01101101 | 0xED | 237 | 11101101 | ||
n | 0x6E | 110 | 01101110 | 0xEE | 238 | 11101110 | ||
o | 0x6F | 111 | 01101111 | 0xEF | 239 | 11101111 | ||
p | 0x70 | 112 | 01110000 | 0xF0 | 240 | 11110000 | ||
q | 0x71 | 113 | 01110001 | 0xF1 | 241 | 11110001 | ||
r | 0x72 | 114 | 01110010 | 0xF2 | 242 | 11110010 | ||
s | 0x73 | 115 | 01110011 | 0xF3 | 243 | 11110011 | ||
t | 0x74 | 116 | 01110100 | 0xF4 | 244 | 11110100 | ||
u | 0x75 | 117 | 01110101 | 0xF5 | 245 | 11110101 | ||
v | 0x76 | 118 | 01110110 | 0xF6 | 246 | 11110110 | ||
w | 0x77 | 119 | 01110111 | 0xF7 | 247 | 11110111 | ||
x | 0x78 | 120 | 01111000 | 0xF8 | 248 | 11111000 | ||
y | 0x79 | 121 | 01111001 | 0xF9 | 249 | 11111001 | ||
z | 0x7A | 122 | 01111010 | 0xFA | 250 | 11111010 | ||
{ | 0x7B | 123 | 01111011 | 0xFB | 251 | 11111011 | ||
| | 0x7C | 124 | 01111100 | 0xFC | 252 | 11111100 | ||
} | 0x7D | 125 | 01111101 | 0xFD | 253 | 11111101 | ||
~ | 0x7E | 126 | 01111110 | 0xFE | 254 | 11111110 | ||
DEL | 0x7F | 127 | 01111111 | 0xFF | 255 | 11111111 |
最後に。0x20-0xBFの範囲を32文字ずつ並べておきます。
文字 | 16進 | 文字 | 16進 | 文字 | 16進 | ||
---|---|---|---|---|---|---|---|
SP | 0x20 | @ | 0x40 | ` | 0x60 | ||
! | 0x21 | A | 0x41 | a | 0x61 | ||
" | 0x22 | B | 0x42 | b | 0x62 | ||
# | 0x23 | C | 0x43 | c | 0x63 | ||
$ | 0x24 | D | 0x44 | d | 0x64 | ||
% | 0x25 | E | 0x45 | e | 0x65 | ||
& | 0x26 | F | 0x46 | f | 0x66 | ||
' | 0x27 | G | 0x47 | g | 0x67 | ||
( | 0x28 | H | 0x48 | h | 0x68 | ||
) | 0x29 | I | 0x49 | i | 0x69 | ||
* | 0x2A | J | 0x4A | j | 0x6A | ||
+ | 0x2B | K | 0x4B | k | 0x6B | ||
, | 0x2C | L | 0x4C | l | 0x6C | ||
- | 0x2D | M | 0x4D | m | 0x6D | ||
. | 0x2E | N | 0x4E | n | 0x6E | ||
/ | 0x2F | O | 0x4F | o | 0x6F | ||
0 | 0x30 | P | 0x50 | p | 0x70 | ||
1 | 0x31 | Q | 0x51 | q | 0x71 | ||
2 | 0x32 | R | 0x52 | r | 0x72 | ||
3 | 0x33 | S | 0x53 | s | 0x73 | ||
4 | 0x34 | T | 0x54 | t | 0x74 | ||
5 | 0x35 | U | 0x55 | u | 0x75 | ||
6 | 0x36 | V | 0x56 | v | 0x76 | ||
7 | 0x37 | W | 0x57 | w | 0x77 | ||
8 | 0x38 | X | 0x58 | x | 0x78 | ||
9 | 0x39 | Y | 0x59 | y | 0x79 | ||
: | 0x3A | Z | 0x5A | z | 0x7A | ||
; | 0x3B | [ | 0x5B | { | 0x7B | ||
< | 0x3C | \ | 0x5C | | | 0x7C | ||
= | 0x3D | ] | 0x5D | } | 0x7D | ||
> | 0x3E | ^ | 0x5E | ~ | 0x7E | ||
? | 0x3F | _ | 0x5F | DEL | 0x7F |
このページに関するちょっとした感想または、要望、バグ・間違いの指摘などは、下記の送信欄からお送りください。 質問・その他お問合せなど、返信をご希望の方は「こちらのページ」からメッセージをお送りください。
「このページはお役に立ちましたか?」のアンケートと自由メッセージのどちらか一方でかまいません (両方だとよりうれしいです)。お気軽にご利用ください (感想・どんな用途で使用したかなどをいただけると作成・運営の励みになります!)。