ミケネコ研究所 / 文字コードの部屋 / 半角カナ

半角カナ

半角カナを表現する時の、エンコード別の解説。ちょっと不充分です。


半角カナの扱い

シフト JISで半角カナを用いる場合

シフト JISでは、半角カナに相当する文字領域が、つぎの領域に割り当てられています。

SJIS|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
----+------------------------------------------------
  A |    。「  」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
  B | ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
  C | タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
  D | ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜

ISO-2022-JP で半角カナを用いる場合

ISO-2022-JP には、半角カナに相当するコードは含まれていません。
そこで、半角カナを利用するための方法が、いくつか編み出されました。どれも独自拡張なので、互いの合意がある場所以外では使用できません。

・JIS7方式

普段はASCII文字が割り当てられている領域に、半角カナを配置し、エスケープシーケンスや SI/SO によって半角カナモードに切り替えます。 半角カナの領域は、次のとおり。

JIS7|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
----+------------------------------------------------
  2 |    。「  」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
  3 | ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
  4 | タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
  5 | ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜

半角カナの「ア」を使おうとして、いきなり 31 なんて言っても、ASCIIの領域とぶつかってしまうので、次のどちらかの方法で、半角カナであることを知らせます。

1. 半角カナのはじまりを宣言するエスケープシーケンスを用いる方法です。
JIS X0201-1976 片仮名    1B 28 49    [ESC] ( I
「1B 28 49」というバイト続きが現れたら、以降は半角カナであることを宣言します。

2. SO(シフトアウト)コードとSI(シフトイン)方式です。

SO(シフトアウト)       0E
SI(シフトイン)         0F
0E というバイトが現れたら、以降は半角カナであることを宣言します。OF で、この宣言を解除します。

SO/SI式の方が、やや普及度は高いでしょうか。いずれにしても、ISO-2022-JP において、半角カナを使うのは、好まれません。

・JIS8方式

8ビット目を用いて10進数の161〜223 (A1h〜DFh) の範囲に割りあてます。ISO-2022-JP では普段使用していない領域のため、エスケープシーケンスによる宣言を必要としません。

JIS8|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
----+------------------------------------------------
  A |    。「  」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
  B | ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
  C | タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
  D | ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜

EUC-JP

EUC-日本語 では、半角カナは前に 8E をおいた2バイト表現となります。 (ただし、UNIX システムに半角カナのためのフォントが用意されていることは少ないです。)

EUC-JP|  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
------+------------------------------------------------
8E A  |    。「  」 、 ・ ヲ ァ ィ ゥ ェ ォ ャ ュ ョ ッ
8E B  | ー ア イ ウ エ オ カ キ ク ケ コ サ シ ス セ ソ
8E C  | タ チ ツ テ ト ナ ニ ヌ ネ ノ ハ ヒ フ ヘ ホ マ
8E D  | ミ ム メ モ ヤ ユ ヨ ラ リ ル レ ロ ワ ン ゛ ゜

半角アは、8E B1 という2バイト表現であらわせます。しかし困ったことに、シフト JIS コードで 8E B1 といえば、「竺」という漢字になります。このように、EUC の半角カナは、シフト JISの次の領域と*必ず*衝突します。

S-JIS |  0  1  2  3  4  5  6  7  8  9  A  B  C  D  E  F
------+------------------------------------------------
8E A  | 滋 治 爾 璽 痔 磁 示 而 耳 自 蒔 辞 汐 鹿 式 識
8E B  | 鴫 竺 軸 宍 雫 七 叱 執 失 嫉 室 悉 湿 漆 疾 質
8E C  | 実 蔀 篠 偲 柴 芝 屡 蕊 縞 舎 写 射 捨 赦 斜 煮
8E D  | 社 紗 者 謝 車 遮 蛇 邪 借 勺 尺 杓 灼 爵 酌 釈

このように、EUC コードの半角カナだけで構成された文字列は、シフト JIS コードと見分けがつきません。また、EUC コードの文字中に半角カナがいくつか混じっていたとき、EUC かシフト JIS コードかの判別が不可能になる恐れがあります。

Unicode

他コードと変換する際、「互換」を保つ目的で、Unicodeにも半角カナ領域は用意されています。


文字コードの部屋 http://mikeneko.creator.club.ne.jp/~lab/kcode/
お問い合わせ <lab@mikeneko.ne.jp>