12月20日 きっかけは
前から、不安に思っていたこと。 「メールが満杯になったらどうしたらいい」、「トラブルでメールが消えたらどうしよう」 私はBeckyとOutlookExpressを使っています。 これをテキストファイルとして保存したらいいんじゃないかと常々思っていました。 やってみようか。 まずメモ帳で C:¥becky以下のメールの保存領域 xxx.bmf を見てみる。 Return-Path:... とbeckyのヘッダで見覚えのあるキーワードがある。 が、 Subject: =?iso-2022-jp?B?GyRC... と、これは何だ。 それに後ろの方の $B=U$rO"$l$F$-$?:y$N2V$,%... など訳の分からない記号は? と言う訳で、さっそくインターネットで調べてみる。 なんとか分かった。 BASE64変換とか。 通信では、8ビットは使えず、7ビットを用いている。(昔聞いたパリティビットと関係あるのか?) とにかく、 ① 8ビットの文字×3バイトを6ビット(頭2ビットには0を詰める)×4バイトにする。 ② 変換前の文字列が3の倍数でない時は足りないビットに0を詰める。 ③ 結果の各バイトは、(6ビットなので)0~63の数値になっている。 それを 0~25⇒英大文字のA~Z、26~51⇒英小文字のa~z、52~61⇒数字の0~9、62⇒記号の+、63⇒記号の/ と変換している。 ④ 結果のバイト数が4の倍数にならない時は、=を詰めて4の倍数にしている。 この操作をエンコードといい、そして、その文字列を「?iso-2022-jp?B?」と「?=」とで、囲んでいる。 逆の操作はデコードというそうだ。 カタカナの「ア」のJISコードは16進コードで、2522なのでビットで表すと、 00100101 | 00100010 となるので 00001001|00010010|00001000 に変換される。 (最後の00は②により詰めた。) ③と④により、結果はJSI=という文字列になる。 この反対の操作をすればいいので、Visual Basicでさっそく、テキストボックス2つとコマンドボックスを配置し、メモ帳の「?iso-2022-jp?B?」と「?=」の間の文字列をテキストボックスに貼り付けて、デコード結果をもう一つのテキストボックスに表示してみる。 結果は $B.... またまた?? が、メモ帳で見た後の方の文字列と似ている。 どうやら漢字らしいが。 12月24日 JISコードとシフトJISコード 今年は、アンコールワット旅行の時から雪に見舞われ続けているが、昨日はまれに見る大雪、各地で被害が出ているようだ。 昨日と今日、午後になって家の周りの道の除雪をする。 そして、除雪作業の合間に、懸命になってインターネットで、先日のメモ帳で見たメールの訳の分からない文字の理由を調べる。 有った! パソコンで使っている漢字はシフトJISコードだそうだが、メール等ではJISコードを使っている。 パソコンに表示する為にはJISコードからシフトJISコードに変換する必要がある。 前回メモ帳で見た、・$BはここからJISコードが始まることを(最初の・はEscコードと言い、アスキー文字には無いコード、メモ帳では文字化けしていた)(BはJISコードの終わりを表す。 (Jが使われる時もある。 それなら、先日のVBのプログラムにもう一つテキストボックスを追加して、シフトJISコードを表示するようにしてみよう。 さらに、インターネットでJIS⇒シフトJIS変換の仕組みを調べるが、Cで書かれたプログラムは多いが、VBではない。 バリバリのプログラマーはVBなんか使わないのか…。 変換のロジックはいろいろ調べてみた結果、VBで20行前後でプログラムにすることができた。 実行してみた結果、確かにメールで見たとおりの文字が出てきた。
by t_ichib
| 2005-12-24 20:52
| 今日もまた老年プログラマー
|
プロフィール
カテゴリ
以前の記事
その他のジャンル
記事ランキング
|
ファン申請 |
||