2015年5月25日月曜日

PC 文字コード [さわり]

パソコンに限らず、デジタルデバイスでは、文字を何らかの方法で記録します。
字が記録出来る形に変換されて保存されます。
そこで、出て来る言葉が 文字コード です。
ここでは、windows に標準装備された メモ帳 (Notepad.exe) を使って見て見ます。


文字コード。
この言葉、見るのも嫌と言う方もおいででしょう。
私もそのひとり。  複雑怪奇で良く分んない の代表です。

所謂、文字データの代表のテキストファイルに限らず、
マルチメディアファイルである音楽や写真や動画にも、メタデータとして文字は挿入されています。

それを調べて行くと、
やれ、文字コードだの、エンコードだの、デコードだの、シフトジス (Shift JIS) だの、ユニコード (Unicode) だの、
16進数 (Hex) だの、制御文字だの、コードページだの、 etc.etc. ... 。
難しい言葉のオンパレード。

まぁ、そうだったのかと、 断片でも その中身を見て見たい方の為に、書いて見ます。  ですから、 さわり だけ。.



先ずは、この絵をご覧下さい。

メモ帳 (Notepad.exe) で、 あいうABC123[改行][文字コードの種類] を入力し、それぞれの指定で保存したものを、
バイナリエディタ (xedit.exe Free Soft) で見たものです。   画像編集ソフトでひとつの画面に纏め注記してますが。.



バイナリエディタは、実際に0と1で保存されている情報を、分り易く0~9とA~Fとの16文字で表示するものです。
左側にバイナリ、右側にテキスト内容が表示されます。  EOF は文字コードではなく、状態です、 念の為。.
この例では、ファイル冒頭から改行までは、全く同じ文字(テキスト)の内容です。   見較べて見て下さい。.

単純なテキストファイルでも、改行情報や内部情報(正確な表現ではありません)が入っています。

まぁ、細かい文字コードの説明や解説は専門の方にお任せすると致しましょう。
ここで、書いても、興味の無い方には、ちんぷんかんぷん でしょうし、 何の役にも立たないでしょうから。
ただ、同じ文字内容でも、 文字コードの指定が変わると、記録されているデータが全く異なる点に注目して下さい。



では、どうして、保存の時に 文字コード を選べるようになっているのか?。

それは、使い道によって、正確に表示が出来ない等の弊害があるからです。  所謂、文字化け。

実は、文字は、それぞれの団体や企業が、自分の分野の標準仕様を決める場合に、何かひとつを採用します。
でも、それぞれの思惑があり、ばらばら なのですね。
windows Linux(UNIX) Macintosh 皆、それぞれの中心的(基準的)な文字コードが存在します。
ハード上の種類を飛び越すブラウザやメールに関しても、同様です。
各ソフトやアプリも自分で扱う文字をこの規格でと決めている場合もあります。

普通は、自動的に変換されているので、余り、意識せずに使えているケースが殆どでしょうが。

つまり、実際には、 皆、自分勝手 なもの を扱っているのですね。

それでは困るので、やがて、標準化の動きが出ますが、独自拡張や標準化決裂なんて日常茶飯事です。
過去の歴史や遺産が、統一化を阻む経緯もありますし。
何と言っても、自分の決めたものが一番、と言う風潮は、 どこの世界でも同じ。
それから、コンピュータの世界は、その進化の過程から、英語が中心です。
  メモ帳の標準文字コードの表記が コードページ名の 日本語 や Shift JIS になっていなくて、 ANSI のまま。
  ANSI (American National Standards Institute) アメリカ工業標準委員会 の事ですね。
  この事が、如実に現しています。
漢字を初めとする2バイト圏と言われる言語(国の言葉)は、まだまだ、特殊な位置付けです。  随分、問題は減っていますが。.
外国製のアプリで、日本語のフォルダ名やファイル名が上手く機能しない事もあります。
  恐らく、その問題の多くは、採用するライブラリでの文字の扱いが2バイト文字を考慮していない為 と言われています。


上の図の中にも、本来の文字以外に、 改行や宣言( バイトオーダー BOM )が入っています。
文字の列の中に、コンピュータに対する命令や定義や区切りやらが文字データとして埋め込まれている訳です。

メモ帳で作ったファイルには、
どの様な文字コードで記述されているかを判別出来る仕組みがあり、その情報が冒頭に宣言されています。

メモ帳のテキストファイルでは少ないでしょうが、  
類似の状況下で、作成した とある ファイルを、
別の環境(コンピュータやソフト)に持込んだ時、誤動作や認識不可を引き起こす場合があるのですね。
  各技術や分野において、ある文字(記号類が多い)に特殊な意味や役割を割り当てているからです。
  そして、2バイト文字である日本語は、記号化(エンコード・符号化)する段階でその特殊文字を内包する可能性を持っています。



実際、windows (日本語) を見ても、幾つかの文字コードがぶつかり合います。
良く windows はシフトジス(Shift JIS) と説明されますが、
内部は Unicode ですし、表示に係る部分が Shift JIS (CodePage932)。
プログラムを書けば、Visual Studio のソースは UTF-8、 でも、バッチファイルでは ANSI (Shift JIS)。
その他、色々な文字コード (例:Base64/UTF-16BE/UTF-16LE) のファイルが働いています。  (テキスト バイナリのメタデータ 共)
こんな具合です。          う~ん、この辺り、少し、突っ込み過ぎましたか?。  読み飛ばして下さい。.



ファイルは、元々、それを作ったソフトやアプリ専用のものです。
ソフトやアプリが意図した通りに動く様な、からくりが埋め込まれています。
それだけでは、困る場合もあるので、 一部、共通化がされている とお考え下さい。
  ファイルフォーマットとしてその規格が公開されているものもあれば、一切、外部には出ないものまで、様々です。.


共通化を補助する為に、
文字コードを変換する機能(ソフト側) 或いは 文字コードの判別データ(ファイル側) が付いているものがあるのです。


逆に見れば、
色々な用途毎に、最適化された 文字を定義した集団 (文字コード) が必要だった と言う事でしょうか。



0 件のコメント:

コメントを投稿