おれさま手帖 KYOTO-STYLE :Jcode.pmを使う


DiaryHome| 管理用:

見出し



日記過去ログ

1999: 6 7 8 9 10 11 12
2000: 1 2 3 4 5 6 7 8 9 10 11 12
2001: 1 2 3 4 5 6 7 8 9 10 11 12
2002: 1 2 3 4 5 6 7 8 9 10 11 12
2003: 1 2 3 4 5 6 7 8 9 10 11 12
2004: 1 2 3 4 5 6 7 8 9 10 11 12
2005: 1 2 3 4 5 6 7 8 9 10 11 12
2006: 1 2 3 4 5 6 7 8 9 10 11 12
2007: 1 2 3 4 5 6 7 8 9 10 11 12
2008: 1 2 3 4 5 6 7 8 9 10 11 12
2009: 1 2 3 4 5 6 7 8 9 10 11 12
2010: 1 2 3 4 5 6 7 8 9 10 11 12
2011: 1 2 3 4 5 6 7 8 9 10 11 12
2012: 1 2 3 4 5 6 7 8 9 10 11 12
2013: 1 2 3 4 5 6 7 8 9 10 11 12
2014: 1 2 3 4 5 6 7 8 9 10 11 12
2015: 1 2 3 4 5 6 7 8 9 10 11 12
2016: 1 2 3 4 5 6 7 8 9 10 11 12
2017: 1 2 3 4 5 6 7 8 9 10 11 12
2018: 1 2 3 4 5 6 7 8 9 10 11 12
2019: 1 2 3 4 5 6 7 8 9 10 11 12
2020: 1 2 3 4 5 6 7 8 9 10 11 12
2021: 1 2 3 4 5 6 7 8 9 10 11 12
2022: 1 2 3 4 5 6 7 8 9 10 11 12
2023: 1 2 3 4 5 6 7 8 9 10 11 12
2024: 1 2 3

最近のキーワード

Jcode.pmを使ってみるテスト

■ on ActivePerl 5.8.7.815

Windows XP上で、ActivePerl-5.8.7.815-MSWin32-x86-211909.msiでの動作を確かめる。

○サンプルスクリプト
#!/usr/local/bin/perl
use lib '../lib';
use Jcode;
@s = ;
$s = join "" , @s;
Jcode::convert( ¥$s , 'utf-8' );
print $s;
exit;

これで、Shift-JISのファイルを用意し、

>perl test.pl < test.txt > out.txt

で、変換されるout.txtのコードをエディタ(xyzzy)で確かめる。

Jcode.pmの開発者の Dan Kogai さんによるJcode.pm - jcode.pl の後継、Encode.pm への架け橋によれば、Perl 5.8.1以降は、標準ライブラリ Encode.pm に Jcode.pm の機能が盛り込まれており、Jcode 2.0 以降であれば、Jcode.pm をライブラリの直下に置けば使えるようになるとのこと。

そこで、上記サイトから、Jcode.pm をダウンロードして、'../lib'に置いて、上記プログラムを走らせてみると、すんなり通った。これはOK。

■ on @nifty

で、本番である。

ファイルの依存関係から、Jcode.pmを動かすために必要なファイル群は、「tomomori ってなんだあ?: Jcode.pm」に示されている。

@nifty の perl のバージョンは、5.00502 であり、5.8.7のモジュールだと、バージョンが高くて使えないものがあることから、動作実績がある ActivePerl 522 を使うことにした。これは、ActivePerlのサイトから、ダウンロード画面まで行ったところで、「Archive of older releases」のリンクで、http://downloads.activestate.com/ActivePerl/ へ飛び、 AP522_source.zip をダウンロードすると、lib ディレクトリの中にあります。

次に、Jcode.pm だが、現在のバージョンは2.03で、これを使ってみると、eucへの変換は出来るのだが、eucからutf8への変換が出来ない。そこで、旧バージョンである0.88を使うことにした。

この場合( ActivePerl 522 + Jcode-0.88 )でのディレクトリ構成。

 /cgi-bin/ の下に lib/ を作り、その下に設置。
lib
│ AutoLoader.pm
│ Carp.pm
│ DynaLoader.pm
│ Exporter.pm
│ integer.pm
│ Jcode.pm
│ overload.pm
│ strict.pm
│ vars.pm
│
└─Jcode
  │ Constants.pm
  │ H2Z.pm
  │ Tr.pm
  │
  └─Unicode
      Constants.pm
      NoXS.pm

なお、0.88でなくても、ここを参考に、Jcode::Unicode::NoXSのファイルの中で、以下の置き換えをすればOK。

なお、最終バージョン2.07の場合、必要なファイルは以下のとおり。

 /cgi-bin/ の下に lib/ を作り、その下に設置。
lib
│ AutoLoader.pm (標準ライブラリから)
│ Carp.pm (標準ライブラリから)
│ Exporter.pm (標準ライブラリから)
│ integer.pm (標準ライブラリから)
│ Jcode.pm
│ overload.pm (標準ライブラリから)
│ strict.pm (標準ライブラリから)
│ vars.pm (標準ライブラリから)
│
└─Jcode
  │ _Classic.pm
  │ Constants.pm
  │ H2Z.pm
  │ Tr.pm
  │
  └─Unicode
      Constants.pm
      NoXS.pm 【上記変更が必要】

■ @niftyでPerl Moduleを使うときの注意点と、便利なこと

○検索パスの追加

requireやuseでパスが設定されていないときに検索するパスの追加で、

use lib './foo/bar/';

が使えないので、

BEGIN { push( @INC , './foo/bar'); }

とする。@INCは、requireやuseでの検索パスを示す特殊変数。

○エラーのトラック

@niftyでは、兎角エラーの内容がわかりにくいが、モジュール組み込み時に発生するエラーについては、

eval 'use HOGE;';
print $@;

として、eval関数でエラーが発生したときの戻り値で判断すると良いようだ。

■サンプルプログラム

とりあえずおいておく。

#!/usr/local/bin/perl
BEGIN { push( @INC , '../lib'); }
use Jcode;
open( IN , "./test.txt" );
@s = ;
close IN;
$s = join "" , @s;
&Jcode::convert( ¥$s , 'utf8' );
print "Content-type: text/html; charset=utf-8¥n¥n";
print "
¥n";
print $s;
print "
¥n"; exit;

[Top] [Homepage] [Diary]