0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | NUL | DLE | sp | 0 | @ | P | ` | p | ー | タ | ミ | |||||
1 | SOH | DC1 | ! | 1 | A | Q | a | q | 。 | ア | チ | ム | ||||
2 | STX | DC2 | " | 2 | B | R | b | r | 「 | イ | ツ | メ | ||||
3 | ETX | DC3 | # | 3 | C | S | c | s | 」 | ウ | テ | モ | ||||
4 | EOT | DC4 | $ | 4 | D | T | d | t | 、 | エ | ト | ヤ | ||||
5 | ENQ | NAK | % | 5 | E | U | e | u | ・ | オ | ナ | ユ | ||||
6 | ACK | SYN | & | 6 | F | V | f | v | ヲ | カ | ニ | ヨ | ||||
7 | BEL | ETB | ' | 7 | G | W | g | w | ァ | キ | ヌ | ラ | ||||
8 | BS | CAN | ( | 8 | H | X | h | x | ィ | ク | ネ | リ | ||||
9 | HT | EM | ) | 9 | I | Y | i | y | ゥ | ケ | ノ | ル | ||||
A | LF | SUB | * | : | J | Z | j | z | ェ | コ | ハ | レ | ||||
B | VT | ESC | + | ; | K | [ | k | { | ォ | サ | ヒ | ロ | ||||
C | FF | FS | , | < | L | \ | l | | | ャ | シ | フ | ワ | ||||
D | CR | GS | - | = | M | ] | m | } | ュ | ス | ヘ | ン | ||||
E | SO | RS | . | > | N | ^ | n | ~ | ョ | セ | ホ | ゙ | ||||
F | SI | US | / | ? | O | _ | o | DEL | ッ | ソ | マ | ゚ |
0 NUL ナル。PCharなんかの文字列の終わりを示すセンチネル。
7 BEL ビープ。"ビッ"と音が鳴る。
8 BS バックスペース(後退)
9 HT ホリゾンタルタブ。水平タブ。いわゆる普通のタブ。
A LF ラインフィード。unix系の改行コード。
D CR キャリッジリターン。CR+LFでWindowsの改行コード。
1B ESC エスケープ。
7F DEL デリート。
6 ACK、16 SYN この二つはネットワークの記事にちょくちょく出てくる。
SYNフラッド攻撃のSYNはこのSYNだと思う。
E SO、F SI はシフトアウト、シフトインじゃなかろうか。昔PC-9801を使ってた頃プリンタ制御にこれを使った記憶があるようなないような。
B VT バーチカルタブ。垂直タブ。あまり使われないと思う。
C FF これはページ送りかな?
□第1バイトの範囲 - 129〜159、224〜239(0x81〜0x9F、0xE0〜0xEF)
□第2バイトの範囲 - 64〜126、128〜252(0x40〜0x7E、0x80〜0xFC)
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | sp | 0 | @ | P | ` | p | ー | タ | ミ | |||||||
1 | ! | 1 | A | Q | a | q | 。 | ア | チ | ム | ||||||
2 | " | 2 | B | R | b | r | 「 | イ | ツ | メ | ||||||
3 | # | 3 | C | S | c | s | 」 | ウ | テ | モ | ||||||
4 | $ | 4 | D | T | d | t | 、 | エ | ト | ヤ | ||||||
5 | % | 5 | E | U | e | u | ・ | オ | ナ | ユ | ||||||
6 | & | 6 | F | V | f | v | ヲ | カ | ニ | ヨ | ||||||
7 | ' | 7 | G | W | g | w | ァ | キ | ヌ | ラ | ||||||
8 | ( | 8 | H | X | h | x | ィ | ク | ネ | リ | ||||||
9 | ) | 9 | I | Y | i | y | ゥ | ケ | ノ | ル | ||||||
A | * | : | J | Z | j | z | ェ | コ | ハ | レ | ||||||
B | + | ; | K | [ | k | { | ォ | サ | ヒ | ロ | ||||||
C | , | < | L | \ | l | | | ャ | シ | フ | ワ | ||||||
D | - | = | M | ] | m | } | ュ | ス | ヘ | ン | ||||||
E | . | > | N | ^ | n | ~ | ョ | セ | ホ | ゙ | ||||||
F | / | ? | O | _ | o | ッ | ソ | マ | ゚ |
上の表から解るように、シフトJISの第1バイトは完全に第2バイトの範囲内にある。
よって文字列のnバイト目が2バイト文字の第1バイト目かどうかの判定に
if ((($Moji >= 129) and ($Moji <= 159)) or (($Moji >= 224) and
($Moji <= 239)))
は、そのままでは使えない。
一番手っ取り早いのは文字列の頭から順に1バイトづつ読み込んで判定してnバイトまで続けてその時点での状態を返すやり方。
速度をかせぐにはnバイト目から1バイトづつ文字列の先頭に向かって読み込んで判定していき、シフトJISの範囲外になった時点まで読み込で、その時の状態を判定して返すやり方。ちょっとややこしい。