掲示板に戻る
No:655 タイトル:GEAR戦士撫子 新Part650 お名前:プロフェッサー圧縮 投稿日:2025/05/14 08:13:15 単表示 返信

しかしながら。

これからもっとも必要とされることが確約されているコンピュータ業界─────────

ひいてはインターネッツ含む通信界において、この文字コード周りは規格通りには行きませんでした。

原因は色々ありますが・・・・・・

決定的だったのは、その扱い辛さにあったのです。


          ◇          ◇          ◇


先に述べた通り、漢字は1バイト=256文字では到底賄い切れません。

しかし半端にビットを足してもバイト単位で扱うデジタルコンピュータでは使えません。

必然、1文字2バイト(以上)となる訳ですが・・・・・・

ここに重大な落とし穴が存在しました。

それは──────「互換性」です。


          ◇          ◇          ◇


ここまでの歴史的経緯で何となくお察しの諸兄もおられるでしょうが・・・・・・

コンピュータは基本、欧米英語圏で開発発展してきました。

そしてアルファベット+αなら1バイトで十分事足ります。

ついでに言うと、この当時のコンピュータの記憶容量はKB=1024バイトで数えられる程度しかありません。

1バイトで表現できるものを、わざわざ倍増させる意義も余裕もありゃしなかったのです。


          ◇          ◇          ◇


そういう訳で。

英語圏と互換を保つため、JISコードはASCIIコードの範囲内は1バイトで表現することを強いられました。

不幸中の幸いでASCIIコードには幾つか空きがありましたので、そこを利用してモードチェンジをすることが出来たのです。

しかしながら。

無理矢理ツギハギした所為で、1文字を表現するのに1バイトと2バイトが混在することになってしまったのです。
  • No:656 タイトル:GEAR戦士撫子 新Part651 お名前:プロフェッサー圧縮 投稿日:2025/05/21 08:12:16 単表示 返信

    ところで。

    先に欧米ASCIIコードは7ビットしか使ってないと述べました。

    ですので256通りの後半、128~255までは一応使って良いことになっています。

    とは言え、第一第二水準漢字7000文字等入る訳がありません。

    なので「ここから先は日本独自コード」と「ここから先はASCIIに戻る」という特殊な値をこの未使用エリアに制定することで、欧米コンピュータと互換を取ろうとしたのです。


              ◇          ◇          ◇


    さて。

    ちょっと3秒考えればすぐわかると思いますが、この日本独自の特殊コードを理解しないコンピュータに読ませれば、見るも無惨にバケラッタになるのは自明の理です。

    しかしそれ以外にも、この方式はとても扱い辛い特性を秘めていました。

    それは──────

    今何文字目か頭から数えないとわからないです。


              ◇          ◇          ◇


    「それの何が問題なの」と思いましたわね其処の貴方?

    確かに手紙のような上から下に書き連ねて終わり、の文書では大して問題にならないでしょう。

    しかし、です。

    折角コンピュータを使っているのにそれだけ、というのは芸がなさすぎます。

    そして「ちょっと凝ったことをしよう」と考えた瞬間に、この問題は牙を剥いてくるのです。


              ◇          ◇          ◇


    例えば・・・・・・そうですわね。

    書いた日付を自動で入れられるようにしましょうか。

    「xxxx年〇〇月△△日」みたいな感じで、右上に書くことにしましょう。

    日付はコンピュータ内蔵時計から取ってくるものとします。
  • No:657 タイトル:GEAR戦士撫子 新Part652 お名前:プロフェッサー圧縮 投稿日:2025/05/28 07:40:23 単表示 返信

    年月日それぞれの前には半角数字が入るものとします。

    年は西暦で4桁固定、月日は2桁で1~9は前に空白を入れるようにしましょうか。

    例)1999年 1月 2日

    こんな感じとします。


              ◇          ◇          ◇


    そして日付の"型紙"として次のものを用意します。

    "yyyy年mm月dd日"

    このyyyyの部分を実際の年に、mmは月にddは日に置き換えるものとします。

    このように実際の値を入れる位置を表すものをプレースホルダと言うそうです。

    今回半角英字は入らないと確定しているので普通にアルファベットで表してますが・・・・・・

    実際はもっと特殊な書き方するらしい、です。

    わたくし作ったことありませんので聞いた話ですが。


              ◇          ◇          ◇


    ともあれ。

    この"型紙"に実際の日付を入れてタイムスタンプを完成させましょう。

    まず年の部分は先頭から1-4文字をそのまま上書きするだけです。

    とても簡単です。特に考えることはありません。


              ◇          ◇          ◇


    問題は次、月の部分です。

    文字数で考えれば、mmの位置は6~7文字目です。

    しかし。

    先程も言いましたが・・・・・・コンピューターは文字単位ではなく、あくまでバイト単位で動きます。

    そして、「年」という漢字は1バイトでは表現できないのです。
  • No:658 タイトル:GEAR戦士撫子 新Part653 お名前:プロフェッサー圧縮 投稿日:2025/06/04 08:12:39 単表示 返信

    ひとまず漢字を2バイトで考えますと、yyyy年mm月dd日のメモリー上の位置は以下のようになります。

    012345678910111213
    yyyy年mm月d d 日

    日のところが隙間空いてますが表記上の都合です。

    実際の表示は2000年10月11日のようになります。


              ◇          ◇          ◇


    また、先頭位置が0となっているのはそういうものだからです。

    1バイトが取りうる値は0~255の256通りで、0も当然含まれます。

    と言いますか先にも述べましたが、当時のコンピューターのメモリーは希少でしたので、わざわざ0を除外する理由も余裕もありゃしなかったのです。


              ◇          ◇          ◇


    閑話休題。

    日付の月(mm)の位置は、文字単位で数えると6文字目であり、バイト単位で数えると7バイト目です。

    メモリーアドレスでいうと位置6となります。

    文字単位で数えた位置とメモリーアドレスは同じ6ですが、これは先程言ったようにアドレスの数え方が0から始まっているからです。

    実際に数える時はバイト単位ですので、1バイト分ズレていることになります。


              ◇          ◇          ◇


    さて。

    ここで思い出してほしいのですが、現代に至るコンピューターの基礎理論はチューリングマシンを祖とします。

    そしてチューリングマシンとは1本のテープの上を行ったり来たりするものです。

    つまり。

    mmの位置を特定するには、頭から順に見ていくしかないと言うことなのです。
  • No:659 タイトル:GEAR戦士撫子 新Part654 お名前:プロフェッサー圧縮 投稿日:2025/06/11 08:12:15 単表示 返信

    一応この時期になりますと、アドレスを直接指定して見に行く機構は完成されてはいます。

    しかし先程も述べましたが、今回の場合は一文字のバイト数が違うのが混じっているため、最も原始的な手法を取らざるを得ません。

    更に言いますと・・・・・・

    この日付の位置が、先頭か末尾かでも大きく違ってくるのです。


              ◇          ◇          ◇


    繰り返しになりますが。

    多少ダイレクトに行き来できるようになったとは言え、コンピューターのメモリはどこまで行っても一本のテープです。

    厳密に言うと多少違うらしいのですが・・・・・・

    基本理念は一緒だそうなので、ここではシーケンシャルなテープということにします。


              ◇          ◇          ◇


    さて。

    メモリの場所(アドレス)は8ビット=1バイト単位なので、ASCIIの範囲であれば文字数=バイト数です。

    しかし、1バイト文字と2バイト文字が混在している場合、この計算法は使えません。

    つまるところ。

    もし日付が文末にあった場合、文章を頭から1文字ずつ数えて行かなければならないことを意味するのです。


              ◇          ◇          ◇

    どうですか?

    もう聞いただけで面倒なことこの上ないと思いますわよね?

    しかして。

    文字種混合文書の恐ろしさは、まだほんの序の口に過ぎないのです─────────
  • No:660 タイトル:GEAR戦士撫子 新Part655 お名前:プロフェッサー圧縮 投稿日:2025/06/18 08:12:28 単表示 返信

    欧米系アルファベット+αのASCIIと、万単位の漢字仮名を持つ日本語を同居させるために「こっから先は漢字ゾーン」「こっから先はASCII」とする印がJISコードにはある、と述べました。

    それぞれSI・SOと呼ばれていますが・・・・・・

    これらはその特性上、ただの印であって文字数には含まれません

    ただ当たり前ですがメモリは1バイト分使います。


              ◇          ◇          ◇


    つまり。

    先程から例に出しているyyyy年mm月dd日は、正確には次のような状態です。

    01234 567 89a bcd efg hij
    yyyySI年SOmmSI月SOddSI日SO

    10以降は表記の都合上アルファベットにしていますが、a=10,b=11,...と読み替えてください。


              ◇          ◇          ◇


    見て分かる通り、本当のmmの位置は7バイト目ではなく9バイト目です。

    もし7バイト目に上書こうものなら年の後半バイトを書き換えてしまうことになりますのでものの見事に文字化けします

    「半角英数字記号は1バイト 漢字は2バイト」なる半端な知識で作るとご覧の有様、という訳です。


              ◇          ◇          ◇


    とまあ。

    流石にこれは罠すぎると言いますか、「今何文字目か」を計算するにも七面倒この上ないとなりまして。

    SI/SOを取っ払ったJISコードの派生規格が作られました。

    Shift-JISです。
  • No:661 タイトル:GEAR戦士撫子 新Part656 お名前:プロフェッサー圧縮 投稿日:2025/06/25 07:02:35 単表示 返信

    少し前にASCIIは7ビットコードであると述べました。

    繰り返しますが現代コンピュータは8ビット=1バイトを最小単位として扱いますので、取りうる値の半分近くを投げ捨てていることになります。

    しかし半分と言っても、所詮120文字程度しか空きはありません。

    これまた繰り返しになりますが、たったそれだけでは万単位にも及ぶ漢字を収録することなど不可能です。

    何しろ限定しまくった当用漢字ですら千単位ですからね。

    誠にもって自明の理というものです。


              ◇          ◇          ◇


    ではどうするか?

    結論から言いますと・・・・・・

    「現れた文字コードがASCIIの範囲内であれば1バイト1文字、逸脱しているなら後続の1バイトを追加して2バイト1文字」

    と扱うことにしたのです。


              ◇          ◇          ◇


    つまりASCIIでは使われていない領域にSIの機能も持たせるという、効率に振った画期的な方法です。

    メモリが足りない足りないとピーピー言ってる割にSI/SOで2バイトずつ余分に増やすのは、まあ明らかに無駄でしたからね。

    漢字が続けば気にならないのかも知れませんが、先程の日付の例のように数字+漢字のパターンは多いですからね。

    相当に水ぶくれするのは容易に想像できます。


              ◇          ◇          ◇


    ちなみに。

    このShift-JIS、「JIS」と付いている割に政府機関が検討制定したものではありません。

    民間の大手が集まって、彼らの製品でだけ通用する独自ローカル規格だったのです。
  • No:662 タイトル:GEAR戦士撫子 新Part657 お名前:プロフェッサー圧縮 投稿日:2025/07/02 08:12:00 単表示 返信
    当時はコンピュータ業界は大パーソナル時代で、技術者達はロマンを追い求めコンピュータの開発に血道を上げていました。

    日進月歩どころか秒進分歩と言われた激動の時代。

    ぶっちゃけますとノロマなお上になんぞ付き合ってられなかった。

    極めて諸々端折りますとそういうことです。


              ◇          ◇          ◇


    これは別に先入観とか風評とかの話ではなく・・・・・・

    例えばですが、JIS X 0208が漢字を増やす最初の対応するのに7年かかってますからね。

    ドッグイヤーの業界では人生終わりかけに等しい時間です。

    そりゃ付き合ってたら競争力どころの話ではなくヨボヨボですわ。


              ◇          ◇          ◇


    まあそういう訳で。

    当時互換性何それで独自規格上等だったこともあり、各社オリジナルの漢字コードの開発が始まります。

    しかしそんな中。

    漢字コードを「規格」として制定しようとする動きがありました。

    後のPC用OSの覇者マイクロソフトと、技術誌発行会社のアスキーです。


              ◇          ◇          ◇


    当時のPCは独自OS+プログラミング言語(主にBASIC)で動いており、第三者OSはオプション扱いでした。

    と言いますか、好事家が勝手に入れる立ち位置でした。

    それを良しとしない意図があったのです。
  • No:663 タイトル:GEAR戦士撫子 新Part658 お名前:プロフェッサー圧縮 投稿日:2025/07/09 07:02:49 単表示 返信

    当時、日本語圏のPC市場は世界第二位に位置していました。

    そしてこれからも暫くは急成長が見込まれていました。

    日本全体が所謂高度成長期だった時代です。

    畢竟日本市場に食い込むことは巨万の富を得ることと同義だったのです。


              ◇          ◇          ◇


    実はMS-DOSは元々IBM-PC機用に外注されたOSで、当初PC-DOSと呼ばれていました。

    当時のIBMは標準化路線と言いますか、囲い込みではなく広く互換品を認めることで業界全体のキャスティングボートを握ろうとしていました。

    その方針により、PC-DOSも他システムへの移植が認められていました。

    IBM-PC用だからPC-DOSだったので、そのままのネーミングは流石によろしくないということで社名を冠してMS-DOSです。


              ◇          ◇          ◇


    さて。

    そういう訳で日本製PCにもMS-DOSを提供し始めたのですが・・・・・・

    同じMS-DOSを使っているのにPC-AでセーブしたファイルがPC-Bで見たらバケラッタでは話になりません。

    なので、MS-DOSのファイルとしては統一された文字コードが必要となります。

    そうして生まれたのがShift-JISです。


              ◇          ◇          ◇


    少々話が前後しますが、OS(オペレーティングシステム)とは、コンピュータの全ての動作を司るソフトウェアです。

    つまり文字をディスプレイやプリンタに出力したり、外部記憶装置にファイルを読み書きしたりもOSの管轄となります。

    ということはOSが各機種用に用意されていれば、そこで扱われる文字コードはOS標準の文字コードに変換可能となり。

    機種の壁を超えてデータがやり取りできることを意味するのです─────────