アスキーコード表が欲しくなる時が、たまにあります。というわけでコード表です。
以下は左がバイトの上位、上が下位の桁を表しています。例えば"K"は4xとxBが重なったところにあるので、4Bというわけです。16進数については「16進数と10進数の変換」で解説しています。
x0 | x1 | x2 | x3 | x4 | x5 | x6 | x7 | x8 | x9 | xA | xB | xC | xD | xE | xF | ||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0x | NUL | SOH | STX | ENX | EOT | ENQ | ACK | BEL | B S | H T | L F | V T | F F | C R | S O | S I | ア ス キ | コ | ド |
1x | DLE | DC1 | DC2 | DC3 | DC4 | NAK | SYN | ETB | CAN | E M | SUB | ESC | F S | G S | R S | U S | |
2x | SPC | ! | ” | # | $ | % | & | ’ | ( | ) | * | + | , | − | . | / | |
3x | 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | : | ; | < | = | > | ? | |
4x | @ | A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | |
5x | P | Q | R | S | T | U | V | W | X | Y | Z | [ | ¥ | ] | ^ | _ | |
6x | ` | a | b | c | d | e | f | g | h | i | j | k | l | m | n | o | |
7x | p | q | r | s | t | u | v | w | x | y | z | { | | | } | 〜 | DEL | |
8x | \ | 拡 張 ア ス キ | コ | ド |
|||||||||||||||
9x | |||||||||||||||||
Ax | 。 | 「 | 」 | 、 | ・ | ヲ | ァ | ィ | ゥ | ェ | ォ | ャ | ュ | ョ | ッ | ||
Bx | ー | ア | イ | ウ | エ | オ | カ | キ | ク | ケ | コ | サ | シ | ス | セ | ソ | |
Cx | タ | チ | ツ | テ | ト | ナ | ニ | ヌ | ネ | ノ | ハ | ヒ | フ | ヘ | ホ | マ | |
Dx | ミ | ム | メ | モ | ヤ | ユ | ヨ | ラ | リ | ル | レ | ロ | ワ | ン | ゛ | ゜ | |
Ex | |||||||||||||||||
Fx | (C) | TM | … |
問題は0x,1x列のコントロールコードと言われるもので、文字以外の改行とかタブなどの文字の表示を制御するためのコードで、キャラクターベースのOSでは色々と便利に利用されているのですが、Macの場合GUIなのでほとんどのコードは不必要なものです。そんなわけで、各アプリケーションで好きなように利用されていたりします。
以下のものは、大体のアプリケーションで共通して使われています。
DEL=デリート/HT=タブ/LF=ラインフィード/CR=キャリッジリターン/SPC=スペース
以下はコード表を書き出すスクリプト。文字はリストに格納されます。
getCharList()
on getCharList()
set theChars to {}
repeat with j from 2 to 15 -- コントロールコードは飛ばして2から
set end of theChars to {}
repeat with i from 0 to 15
set end of item (j + 1) of theChars to ASCII character (j * 16 + i)
end repeat
end repeat
return theChars
end getCharList
日本語コードと、英語コードではコードに大きな違いがあります。基本は上にある表と同じですが、コード92(5C)は日本語では¥、英語では\になります。
拡張アスキーコードの部分は、言語フォントによって大きく異なり、日本語の場合は、A1〜DFは所謂半角カナが割り当てられています。英語の場合は数学記号等です。
129〜159(81〜9F),224〜252(E0〜FC)は2バイト文字(漢字など)の1バイト目に割り当てられています。例えば、以下のようにASCII character命令を二つ&で結合することで、数字から2バイトコードを生成することができます。
(ASCII character 147)&(ASCII character 206)
--> "鳶"
逆に2バイト文字から文字コードを得るとなると、かなり面倒なことになります。
とりあえず、1バイト目のコードはASCII numberを使えば、すぐに判りますが。後ろの方が非常に面倒。
日本語コードの1バイト目になるコード(ここでは130(82))をくっつけて、Shift-JISの文字1バイト目と合わせて一つの文字にします。すると2バイト目が余るので、character 2 ofで2バイト目を取り出すことができると言う訳です。
たかだか文字コードを得るだけなのに七面倒ですが。
ちなみに、Macで主に使われている文字コードはShift-JISです。文字パレットを利用すれば、それぞれの文字のコードが確認できます。
Mac OS Xは内部的にユニコードを使っているみたいですが、AppleScriptにおけるユニコードは、ちょっと混沌としている状況です。
shiftJIScode("鳶")
--> {147, 206}
on shiftJIScode(theChar)
set dCode to ASCII number (character 2 of ((ASCII character 130) & theChar))
return {ASCII number theChar, dCode}
end shiftJIScode
run script命令で生データを変換することで、16進数から文字列を生成する事もできます。
run script命令はテキストをその場でコンパイルするので、かなり幅広いことができます。ほとんど最後の武器。あまり真っ当なやり方では無いですが。
hex2char("93CE")
-- > "鳶"
on hex2char(theHEX)
return run script "《data TEXT" & theHEX & "》"
end hex2char
バイナリデータを扱う場合に、以下のようにキャラクターコード0を使用すると、エラーも何もなく、いきなり停止することがあります。
ASCII character 0
ASCII character命令の問題と言うわけでなく、どうもAppleScriptの文字列の扱いそのものの問題のようで、readによってファイルを読み込んでいるときに発生する事もあります。
幸いShift-JISでは、0のコードは含まれませんから、上記のハンドラでは、この問題は発生しません。
文字コードや16進数を扱う場合に、OSAXを利用するという手もあります。Tanaka's osaxはその代表的なものです。
MT ASCII Numberで文字コードを、MT Hex Dumpで16進データを得ることができます。MT ASCII Charsを使えば、コードから文字を得ることもできます。
またAppleScriptとしては、アプリケーションがもっている機能を利用するというのもスマートでいいでしょう。多くのテキストエディタで、文字コードに関する命令を使用できるようになっています。
ちなみに、ASCIIってのはAmerican Standard Code for Information Interchangeの略なので、アスキーコードって言葉には、実はcodeが二回含まれていて、良くわからん事になってます。でも、もはや慣習となっているので、突っ込まないでやって欲しいです。てへ。
さらにちなみに、上二列のコントロールコードは、下に4つずらしたキーのコントロールキーとのコンビネーションになっています。
つまりCtr+HはBS、Ctr+MはCRなんです。特にHとMはMacでは殆どの文字入力で通用しますから、ホームポジションから手を離すのが嫌いな私はBSとCRの代わりに多用しています。ごっつー楽です。