●脱線しまくり
桁数とバイト数の違いについて語るはずが、どんどん他の方へ行っちゃって

いつになったらバイトの話をするんやー!
ってお怒り


●バイトの本来の意味とは・・・
バイト本来の意味とは、情報量の単位って前にお話ししました。
ただ、その1バイトが256通りの値を持てることから、
アメリカで、数字やアルファベット(大文字・小文字)、記号に番号を振り、その番号で情報伝達を行おうと考えました。
つまり、
I love you
なら、
49 20 6c 6f 75 65 20 79 6f 75 (16進表記)
となります。
ここで、また16進表記なんて、実生活では(今のプログラミング環境でも

分かりにくいのでいつも使う10進表記に変えてみますね。
73 32 108 111 117 101 32 121 111 117
となります(あーしんど

コンピュータ・・・というよりかテレタイプライターで使われたんですね。
(その前はモールス信号でしょうか?)
テレタイプライターって・・・って話し始めたら、また記事の一つや二つはつぶしちゃうので、Google先生に任せるとして・・・
このような番号振りをコード化って言います。
そして、この文字の一つ一つに番号を振ったコードの体系を
この場合は、ASCII (読み方はアスキー)と言います
American Standard Code for Information Interchange の略です。
直訳すればアメリカ標準情報交換用コード って意味ですね。
●ASCIIだけでは
このASCIIコード、アメリカで使うだけなら、それで良かったんですが、日本でも使うときに、やはり日本語が表現できないと困る・・・ってんで
ASCIIコードを拡張して、半角カタカナを空いてる番号帯に割り振ったんです。
ここで、がぎぐげござじずぜぞ・・・なんかの濁点付きの文字や、
ぱぴぷぺぽ・・・なんかの半濁点付きの文字にも番号を振ると、1バイトの256以内に収まらなかったので、止む無く、濁点と半濁点はそれだけで1つずつの番号を振って、おなじみの
カ゛キ゛ク゛ケ゛コ゛サ゛シ゛ス゛セ゛ソ゛ や ハ゜ヒ゜フ゜ヘ゜ホ゜ と読みにくくなったわけです。
●よって
半角文字、つまり
・数字 (0~9)
・英字 (a~z、A~Z)
・記号 (!,”,#,$,%などなど)
・制御文字 (Cr,Lf,Stx,Etxなどなど)
は1バイト文字と呼ばれ、これらの文字は 0~255(10進表記)の範囲内に割り振られています。
ちなみに、SBCSと言われることもあります。
Single Byte Character Set (1バイト文字セット)って意味ですね。
これに対して、2バイト文字もあります。 DBCS Double Byte Character Setですよね。
このDBCSとは?って言うまでも無く、
全角文字ですよね。
そうです。漢字を含む多くの文字を表すには2バイト必要ですね。
2バイトの情報量なら、65536通りが表せますからね

でも、いつごろからか忘れましたが、XeroxがUnicodeなるものを提唱しました。
これは、いろいろな文字をコード化する時に、各社各様でコード化していたので、同じコンピュータ通しでもメーカーが違えば文字コードが異なり、そのまま解釈して表示とか印刷すると文字化けしちゃってました。
たとえば、
同じAでも ASCIIでは65、 半角文字コードでIBMで使用されているEBCDICでは193になります。
ちなみに、ASCIIの193って『チ』、EBCDICの65って『オ』
なので、AシステムがASCIIでAを送ると、65がIシステムに送られて、その65をEBCDICで解釈すると『オ』になっちゃいます。
逆に、IシステムがEBCDICでAを送ると、193がAシステムに送られて、その193をASCIIで解釈すると『チ』になっちゃいます。
一文字でもこんなにチンプンカンプンなのに、これが文章となるとえらいことになりますよね

と言う事で、全世界統一コード Unicode を提唱したんでしょうね。
この考えは素晴らしいと思います。
でも・・・・
ちょっとばかし問題が・・・
作ったのが西洋人なので、中国の漢字と日本の漢字で形が似ているのは同じとみなされたのか同じ番号(Code)が振られちゃってる事があります。
所って漢字は、

のように違っているのに、同じコードが割り当てられています。
なので、右側の漢字は日本語Windowsでは表示できない(はず)です。
まぁ、ちょっぴりな不都合には目をつむって

でも、Unicode では、1文字を表すのに必要な情報量は・・・?
大抵は2バイト、時に4バイトってなってます。
あれれ?半角文字は1バイトじゃないの?って思われた方もいるのでは?
そうなんです。半角文字でも2バイトです。
●ここからが重要
真打は後からって言葉がありますが、ここまで読み進むのも疲れちゃったんじゃないかなって思います。
もう少しで核心にせまります・・・かも
ちょっと調べたんですが、Windows 10 64bit + Excel 2019 64bit で確かめたところ
セルに入力した文字列はどうやら、Unicodeで格納されているらしい。
しかも UTF-16って言う Unicode の符号化体系の一つで。
これは、Excelの関数とかではなくて、VBAで調べたので、正しそう・・・なんです。
なぜ、正しいって断定的に言わないかと言うと・・・
VBAのプロシージャにセルの中身を渡すとき、Excelが変換をしていない・・・とは限らないからです。
VBAでは、文字列はUnicodeで処理します。
なので、Excelがセルの中に入力されている文字列をVBAに渡すとき、Unicodeに変換している可能性がありありです。
セルに入力されている文字をExcelの関数を用いて調べたら、半角文字は1バイトJIS(ASCIIのカタカナ拡張版)と全角文字は2バイトJISコードでした。
セルに格納されている文字列が本当のところ、どんな文字コードで格納されているのかは確信をもってこれだって言えませんが、確かな事は
Excel関数でByte数で文字列を扱う関数は、半角文字は拡張ASCIIの1バイトコード、全角文字はJISの2バイトコードで扱われるって事でした。
この利点は、半角、全角って言うぐらいなので、プロポーショナルフォントと言う事をそれほど気にしなければ、半角文字の文字幅は全角文字の文字幅の半分です。
よって、表示時や印刷時に、Byte数を知ることで、表示に必要な幅や、印字に必要な幅を推定することが出来ます。

【このカテゴリーの最新記事】
-
no image
-
no image
-
no image