半角カナ
出典: フリー百科事典『ウィキペディア(Wikipedia)』
半角カナ(はんかくカナ)とは、Shift_JISの文字のうちJIS X 0201の片仮名文字集合とビット互換を取ってある部分の通称である。漢字などの全角文字の半分のサイズで表示される事が一般的なためこのように呼ばれる。0xA1~0xDFの範囲の1バイト文字がこれにあたる。また、EUC-JPやUnicodeでもShift_JISとの符号変換の互換性の維持のため半角カナをもっている。これらの文字は過去との互換性の維持のために用意されており、新規の文書等では使うべきでないとされている。
目次 |
[編集] 歴史
ASCIIには7ビットで表現される128文字分のエリアにしか文字は定義されておらず、そこに制御文字、ラテン文字、数字、約物などが配置されている。このようにASCIIはアメリカの開発した基本的に英語用の規格であるため、日本では、8ビットで表現される残りの128文字分のエリアの一部(0xA1~0xDF)に片仮名と日本語用の句読点などを収録したJIS X 0201を開発して使用していた。コンピュータで漢字を扱うことが困難であった草創期は、この片仮名を用いて日本語でメッセージを表示していたのである。そして後にJIS X 0208が規定され漢字などが扱えるようになった際、それまでのJIS X 0201の資産がそのまま使えるように、JIS X 0208をそのまま使うのではなく、JIS X 0201で空いていた領域にJIS X 0208の文字コードを移動(Shift)して当てはめるShift_JISが開発され、使用されるようになった。
Shift_JISの2バイト文字はほぼ正方形で、1バイト文字は2バイト文字の半分の幅・同じ高さで表示・印刷されることが一般的であったため、2バイト文字は「全角文字」、1バイト文字は「半角文字」、特に1バイトの片仮名は「半角カナ」「半角カタカナ」と呼ばれるようになった。しかし文字コードは文字の幅を規定するものではないため、この表現は正確性を欠く。Shift_JISでは半角カナは1バイト、漢字などは2バイトで表されることから「1バイトカナ」という呼称も用いられるが、Unicodeでは「半角カナ」相当の文字を表現するのに2バイト以上を要するため、Unicodeについていうには正確ではない。このように正しい名称を与えることが難しいため、結局慣用的で呼びやすく意思疏通のしやすい「半角カナ」という呼称が一般に使われている。正確性に問題があることに意識がある場合は「いわゆる半角カナ」といった言い方をされる場合がある。
[編集] 符号化方式による半角カナの扱い
[編集] ISO-2022-JP
ISO-2022-JPは電子メール等で使われる符号化方式であり、エスケープシーケンスによって7ビットの領域に文字集合を指示して運用する。指示可能な文字集合はASCII、JIS X 0201ラテン文字、JIS X 0208-1978およびJIS X 0208-1983であり、JIS X 0201片仮名は含まれていない。一般に「メールでは半角カナは使えない」といわれるのはこの事による。
[編集] Shift_JIS
Shift_JISはJIS X 0201の8ビット符号の未使用領域に漢字などの1バイト目を割り当てたエンコーディングであるので、エスケープシーケンスなどを用いず半角カナや漢字を使用できる。MS-DOSが全盛であった頃は、画面表示幅の節約などの面から2バイト日本語に半角カナが併用されることが頻繁であった。
1バイトJIS X 0201との共存を前提としたため、JIS X 0208文字の1バイト目に使用できる領域が限られた結果、2バイト目に7ビットコードを使用せざるを得なくなり、8ビットを利用した符号化にも関わらずShift_JISを理解しない処理系での扱いを難しいものにしてしまった。
[編集] EUC-JP
日本語EUC(EUC-JP)も8ビット環境を前提とした文字コードだが、JIS X 0208の1文字目にあたるコードは、JIS X 0201を1バイトで表した場合の半角カナ部分に重なるように配置されている。そのため、半角カナに相当する文字を使用する必要がある場合は制御文字SS2 (シングルシフト2、0x8E) に続けて使用することになる (このため一見2バイトに見えるが、SS2は文字集合を次の1文字分だけ切り替えるという印のため、片仮名自体はやはり1バイトで符号化される)。この記法によるカナ使用を実装していない処理系も多い。
EUC-JPにおいてJIS X 0208を表すために使用されるコード範囲(0xA1~0xFE)は、1バイトカナのコード範囲(0xA1~0xDF)を完全に内包するため、偶数の文字数で書かれたShift_JISの半角カナは、EUC-JP文字列とほとんど区別がつかない。逆に、EUC-JPの半角カナ(1バイト目0x8E、2バイト目0xA1~0xFE)文字列も、Shift_JIS文字列と区別がつかない。これが「半角カナは文字化けする」と言われる理由の1つである。
[編集] Unicode
過去、すでに多くのShift_JIS等の文書で半角カナが使用されており、それらの文書のコード変換において情報が欠損しないようにするために (いわゆるround-trip conversionの保証)、Unicodeには通常の片仮名とは別に半角カナに相当する互換用文字が定義されている。具体的には「Halfwidth and Fullwidth Form」という分類の中に「Halfwidth Katakana variants」として含まれている。あくまで過去の文章との互換のためであり、半角カナがお墨付きを得たと見るのは誤り。とはいえ、将来のシステムで半角カナが非サポートとなるような事態はまず無くなったと考えてよいだろう。
[編集] インターネットにおける半角カナ
[編集] 電子メール
電子メールを配送するSMTPやネットニュースを配送するNNTPといったプロトコルは7ビットの文字コードを使用するプロトコルであったため、日本ではJUNET時代にISO-2022-JPを使用することがルールとなっていた。
ISO-2022-JPには半角カナが含まれないためメッセージ中に半角カナを含むことは出来ないが、ソフトウェアによっては誤ってメッセージ中に半角カナが含まれていた場合に、8ビットコードのまま送信したり、エスケープシーケンスを用いたりQuoted-printableなどでエンコードし7ビット化して送信するソフトウェアが存在した。後者の場合には対応したソフト同士であれば問題なく表示が出来るが、違うソフト同士や8ビットで送信された場合は正しく表示されないため、「半角カナを使うと文字化けする」と言われるようになった。ここから、ネット上の文章からの半角カナ撲滅を唱えるような急進的な意見もあった。
その後、
などの変化により、現在ではShift_JISをBase64でエンコードしたりUTF-7を使用することで、半角カナを正当な方法で送受信でき、半角カナの使用により問題が発生することは以前より減っている。
[編集] World Wide Web
転送プロトコルであるHTTPにはSMTPのように8ビットコードを扱えないという問題は存在しない。文書を記述するHTMLについては、Shift_JISやEUC-JP、Unicodeなど半角カナを扱える文字コードであればそのまま半角カナを使用できる。
電子掲示板に半角カナを書き込んでも、ほとんどの場合、文字化けしない。ただし、半角カナを使用した場合、前述したようにShift_JISとEUC-JPを区別することが難しいためブラウザやCGIなどで文字コードの自動認識に失敗する事が多いという問題がある。また、半角カナを表示不能な端末もある。
文字コードの自動認識は完全たり得ない為、HTTPレスポンスヘッダやMETAタグで文字コード情報のオプションパラメータを指定する場合もある。また、HTMLのフォームでは、漢字を含む文字列をhiddenとして送信することで確実に送信コードを判別するなどの手法も用いられている。こういった確実な対応がある場合、文字コード誤認の問題は発生しない。
[編集] 半角カナ一覧
上位4ビット | |||||||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | A | B | C | D | E | F | ||
下 位 4 ビ ッ ト |
0 | ー | タ | ミ | |||||||||||||
1 | 。 | ア | チ | ム | |||||||||||||
2 | 「 | イ | ツ | メ | |||||||||||||
3 | 」 | ウ | テ | モ | |||||||||||||
4 | 、 | エ | ト | ヤ | |||||||||||||
5 | ・ | オ | ナ | ユ | |||||||||||||
6 | ヲ | カ | ニ | ヨ | |||||||||||||
7 | ァ | キ | ヌ | ラ | |||||||||||||
8 | ィ | ク | ネ | リ | |||||||||||||
9 | ゥ | ケ | ノ | ル | |||||||||||||
A | ェ | コ | ハ | レ | |||||||||||||
B | ォ | サ | ヒ | ロ | |||||||||||||
C | ャ | シ | フ | ワ | |||||||||||||
D | ュ | ス | ヘ | ン | |||||||||||||
E | ョ | セ | ホ | ゙ | |||||||||||||
F | ッ | ソ | マ | ゚ |
黄色で塗りつぶした範囲は7ビットで表現できる領域、ピンクで塗りつぶした範囲はShift_JISの1バイト目として使用される領域である。