IT Office Nishimiyahara

個人用スマホから商用プログラミングまでなんでもお任せ下さい

漢字コードの変換(その3)

      2015/02/04

BBSを作っていて、勉強になったことが沢山ありすぎ。それに、ソースの書き方も少し変わってきた。

というわけで、「Jcode.pm」を正しい使い方(?)で使ってみた。ただ、この方法は「Jcode.pm」に書いてあるんだけど・・・。この機会に「jcode.pl」も色々な使い方で試してみた。

今まで、「Jcode.pm」を何気なく使用していたせいか、「jcode.pl」は使いにくい。「jcode.pl」はリファレンスを渡すはずなのに、変換されてないこともある。直接「print」できないというのも難点かなぁ・・・。使える条件がよくわからない。それに、「-w」オプションをつけると、「Use of uninitialized value」エラーがたくさん出る。使い方がよくないのかなぁ・・・?

「Jcode.pm」ならば、以下のように使っても正しく動作する。

foreach(@_){ print Jcode->new($_)->jis; }
foreach(@_){ print Jcode->new($_)->jis; }
foreach(@_){ print Jcode::convert($_, 'jis'); }
foreach(@_){ print Jcode::convert($_, 'jis'); }
ただ、「Jcode」は普通のプロバイダではインストールしてないだろうし、解凍したままの「Jcode」は約721KBもある。ユニコードを使えるということで肥大化してるみたいだけど・・・。

その点「jcode.pl」だと、ファイルが1つ(手元にあるのはCR,LF改行で、20,633バイト)で済む。それを考えると、「jcode.pl」を正しく使える方が有益なんだろうなぁ・・・。

話は変わって、連想配列。

連想配列は「ハッシュ」と呼ぶ方がいいようだ。配列と混同しやすいので、これからは「ハッシュ」と書く事にする。

代表的なハッシュは「%ENV」だ。今まで、ハッシュを定義する方法として「$hash{'hoge'} = "ほげ";」のような形式で代入する事しか知らなかった。

実はハッシュも配列と同じように、まとめて定義できる事がわかった。それは以下のようなもの。

# ハッシュの定義
%hash = ('hoge' => 'ほげ', 'geho' => 'げほ');
これで、「$hash{'hoge'}」は「ほげ」、「$hash{'geho'}」は「げほ」を示す事になる。なかなかかっこいい(笑)

また、ソースを書く場合、「;」が行の最後を表すので、「;」をつけなければ複数行に分けて書く事もできる。

# ハッシュの定義 その2
%hash = (
'hoge' => 'ほげ'
, 'geho' => 'げほ'
);
このサンプルCGIでは「タブ」と「改行」を使って整形しているけど、HTMLで表示するときに変換しているので、うまく整形されてない。ちなみに、普段は「スペース4文字」分で表示しているので、テキストとして表示しても、ブラウザでは「8文字」に変換されてしまうのでうまくない。残念だ。

また、引用符を使わなくても、ちゃんと認識してくれるようだ。例えば「$hash{hoge}」でも「ほげ」を示すことになる。「つけなくても動く」というだけで、つけた方が安全だとは思うけど・・・。でも、環境変数くらいなら、使わなくてもわかりやすいし、許してやってもいいかもしれない。

Perlは、色々な書き方ができるので、ソースに自分のスタイルがでるような気がしてきた。

あと、これからは不具合が無いかぎり、ソースは「sjis」だけでいく事にした。ファイル数が結構多くなってきたので、フォルダ内が見にくくなってきたから。

「euc」も良いんだけど、これだと普通のエディタで読めなくなってしまうから。「utf8」も、IEとNNで変換が違っていたり(例えば「?」がIEでは文字化けするとか)するし、なにより変換に時間がかかる。今のところあえて使う必要もない。

・・・

今回、ローカル環境から完全に移行するために「jcode.pl」に変更しました。なので、このスクリプトは無理やり実行してもほとんど意味がないので取りやめます。

ソースコード

respo

respo link

ZenBackWidget

 - 情報技術について