すべてのカテゴリ » 知識・教養・学問 » 知識・学問 » その他

質問

終了

全角 って?                           

          

2バイト文字ということらしいですけど、1文字って1バイトってことではなくてどうして2バイトになってるのでしょうか。
ひょっとしたら、全角文字って、画面上でくっついているのに、半分半分で一つの文字になってるのでしょうか。

全角のコピペは下手したら、半分だけコピペってことになりそうですけど、そうならない仕組みもあるのでしょうね。
パケットの計算をするときに、半角だったらスムーズにいくのに、全角があるおかげでなんだかすごくややこしいのです。漢字もひらがな・カタカナもみんな1バイト文字になったら楽だと思いませんか?

どうして全角が2バイト文字になるか教えて下さい。またひょっとして、倍角だと4バイト文字、4倍角だと8バイト文字になるのでしょうか。その辺もお願いします。

  • 質問者:全角連
  • 質問日時:2009-07-12 01:59:30
  • 0

2バイト文字が存在するのは、より多くの文字をコンピュータで扱うためです。


まずコンピュータがどのように文字を表現しているかを説明します。
コンピュータは機械ですから、基本的に「0」と「1」(電気のON/OFF)しか使えません。
これで文字を表現します。

コンピュータの内部では、各文字と「0」と「1」の数列と1対1で対応付けされています。
例えば、
 「a」は「00000001」
 「b」は「00000010」
 「c」は「00000011」
 「d」は「00000100」
となっています。
この対応表一覧の事を文字コード表と言います。
文字コード表は世界共通の仕様となっています。

文字コード表を世界共通にすることで、
 「a」とメールを送信したら、「00000001」と言う形で送信する。
 受信側のコンピュータは「00000001」が来たので、「a」と画面に出す。
ということが可能になります。


ここで「00000001」に着目します。
コンピュータの世界では、「0」と「1」をビットと呼びます。
「00000001」は8桁あるので、8ビットと呼ばれます。
そして8ビット=1バイトと決められています。
これが1バイト文字です。
1バイト文字はコンピュータの内部では、「00000001」や「00000011」と表現されているわけです。


さて、そんな1バイト文字ですが表現できる文字数には限りがあります。
「0」と「1」が8桁なので、2の8乗個=256個までです。
アルファベットや単純な記号だけならこれで足りますが、平仮名やカタカナ、漢字を表現するにはとても足りません。

では、どうするか。
答えは簡単、表現できる文字数が少ないのら増やせば良いんです。
ということで、2バイト文字が登場します。
8ビットの2倍ですから16ビットになります。
例えば、
 「あ」は「0000000000000001」
 「い」は「0000000000000010」
 「う」は「0000000000000011」
 「え」は「0000000000000100」
とするわけです。
2バイト文字では、2の16乗個=65,536個の文字を表現できます。
これだけあれば、平仮名や漢字などを表現できます。
こうして日本語は2バイト文字として扱われる様になりました。
ちなみに半角カタカナは1バイト文字の空いているところに入れられたので、1バイト文字として扱われます。


「あ」をコピーした場合は「0000000000000001」がコピーされます。
文字の半分だけがコピーされる様なことはありません。


1バイト文字や2バイト文字は、その文字を表現に必要なバイト数を表しています。
これは文字の種類のみで、その大きさは関係ありません。
「「あ」を倍角で表示」にした場合、コンピュータの中では「「0000000000000001」を倍角で表示」となるだけです。
「0000000000000001」の部分は変わらないので、倍角になっても2バイト文字は2バイト文字のままです。
(実際には「倍角で表示」という情報が加わるので、データ容量は少し大きくなります。)


最近ではUnicodeと呼ばれる文字コードがよく利用されています。
Unicodeの場合、半角も全角も全て2バイト文字として扱われます。
機種によってはUnicodeでメールを送信するものもあります。
計算は楽になりますが、パケット代はかさみますね。
またより多くの文字を表現できるよう、4バイト文字なども利用され始めています。
(4バイト=32ビットで、2の32乗個=4,294,967,296個表現できる。)
将来的には、文字コードのバイト数が大きい側に統一されていくでしょう。

より詳細な情報については、「文字コード」などで調べてみてください。
コンピュータがどのように文字を管理しているか、ビットやバイトなどをよく理解しないと難しい世界ですが、参考になると思います。

===補足===
掲示板のタイトルなどで使われている文字数制限では、1バイト文字や2バイト文字はあまり関係がありません。
例えば、タイトルは10文字までという制限があったとします。
同じ文字数制限でも、掲示板の作り方によって動きが変わります。

純粋に文字数でチェックしている掲示板の場合は、
 あいうえおかきくけこ:10文字なのでOK。
 あいうえおかきくけこさ:11文字なのでNG。
 abcdefghij:10文字なのでOK。
 abcdefghijk:11文字なのでNG。
 abcdefghijklmnopqrst:20文字なのでNG。
 abcdefghijklmnopqrstu:21文字なのでNG。
となります。

バイト数でチェックしている掲示板の場合は、
 あいうえおかきくけこ:20バイトなのでOK。
 あいうえおかきくけこさ:22バイトなのでNG。
 abcdefghij:10バイトなのでOK。
 abcdefghijk:11バイトなのでOK。
 abcdefghijklmnopqrst:20バイトなのでOK。
 abcdefghijklmnopqrstu:21バイトなのでNG。
となります。

昔は「バイト数でチェック」が多かったのですが、最近は「文字数でチェック」の方が主流です。
(「文字数でチェック」の方が一般的な考え方に近いので。)
ちなみにSooda!の文字数制限も「文字数でチェック」方式ですね。

文字のバイト数を気にするシチュエーションは、もはや携帯メールの送受信くらいではないでしょうか。

  • 回答者:難しい話 (質問から2時間後)
  • 4
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。
お礼コメント

ありがとうございます。
Unicodeが使われているのでしょうか、ある掲示板のタイトルは、全角で文字数が足りないと思って、半角にしても、全角と同じ文字数にカウントされていて不思議に思ってました。
半角なら、2倍文字を使えると思ってたのに、できないのが不思議でした。

並び替え:

2バイト文字と一般的に言われていますが、実際は文字コードです、0001から0032までが制御コードReturnやSpaceなどでその後数字、小文字、大文字、特殊記号!とか?とかです。問題は漢字で約8000文字が必要で下の用に2バイト以上のコードが必要となります。

JISコード
文字列        かな漢字a
コード値       1B 24 42 242B 244A 3441 3B7A 1B 28 4A 61
ASCII文字     .$B$+$J4A;z.(Ja
エスケープシーケンス <Esc>$Bかな漢字<Esc>(Ja

S-JISコード
文字列        か  な  漢   字  a
コード値       82A9 82C8 8ABF 8E9A 61
ASCII文字      ........a
エスケープシーケンス 存在しない

ECUコード
文字列        か  な   漢  字   a
コード値       A4AB A4CA BAC1 BBFA 61
ASCII文字      ........a
エスケープシーケンス 存在しない

  • 回答者:匿名 (質問から8時間後)
  • 0
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

基本的に半角は英語用のコードのため漢字を入れるのが難しかった
全角は漢字を入れるために使われたコードです
PC-9801シリーズ全盛の頃など漢字ようのロムが高値で売られていた時期もあったんですよ
倍角・4倍角・1/4倍角などは漢字コードそのものはなく加工文字です

  • 回答者:MrNH (質問から2時間後)
  • 1
この回答の満足度
  
とても参考になり、非常に満足しました。回答ありがとうございました。

関連する質問・相談

Sooda!からのお知らせ

一覧を見る