Fieds_labo1

perl-5.8

最終更新:

fieds_labo1

- view
管理者のみ編集可

perl 5.8処理系


※まだぁ@@;
Windowsで動作するActivePerl5.8処理系について
5.8.6、5.8.8で動作確認。

shift-jisテキストデータの処理を行っているperlプログラムを文字化けせずに動かす。
1.前提条件
  • ソースファイルはshift-jisで記述されている。
  • ソースファイル内のダメ文字はエスケープ処置済み。
  • 出力するHTMLの文字コードはshift-jis。
<meta http-equiv="Content-Type" content=text/html; charset=Shift_jis">
  • フォーム入力はjcode.plでshift-jisに変換。
  • shift-jisテキストデータを読み書きする。

2.5.8の入出力処理
入出力はバイト列。
【参考】
Perl 5.8.x Unicode関連

3.方針
  • use encoding "shiftjis"; は使わない。よそのモジュール(最近のはutfが多いと思う)を呼んでいると激しく危ないから。
  • use Encode; の decode(),encode() を使う。
  • use open は使わない。うまくいかないケースっていうのが、よくわからなかったから^^;

4.記述例
  • テキストファイル入力時にエンコード指定。エンコードはshift-jisじゃなくてcp932。INからはUTF8フラグ付文字列を取得。
 if(!open IN, "<:encoding(cp932)", "$text_file") { &error('ファイルが開けません'); }
  • 入力フォームで入力した名前がテキストデータにあるか検索する場合。
$formin{'name'}はjcode.plのconvertでsjis変換されたデータ。
$text_data_nameはcp932エンコード指定で読み込んだテキスト。
$compare_word_utf = Encode::decode('cp932',$formin{'name'});
if($text_data_name =~ /$compare_word_utf/) {
  • テキストデータを表示。UTF8フラグ付文字列をcp932に変換。フラグ落とし。
print "<td>".Encode::encode('cp932',$text_data_name)."</td>\n";






記事メニュー
人気記事ランキング
目安箱バナー