高速半角全角ライブラリ
Perlで半角・全角・絵文字処理を行うのに欠かせない Jcode モジュールですが、如何せん処理が遅い。Perl 5.8.xでは Encode モジュールがあるのですが Jcode と扱いが結構違うので (+д+)マズー
Jcode 1.9 系/2.x系も内部実装が Encode モジュールに変更されたので、Jcoce 0.x 系と動作が違って (+д+)マズー
そこで XS を使った半角・全角・imode絵文字処理を高速処理するモジュールを公開します。Jcode の処理に比べて 10 倍程度の高速化が期待できますが、XS モジュールなのでコンパイルできる環境が必要となります。
※コンパイル済みのモジュールは gcc のバージョンの差異で動作しない可能性があるので配布を停止しました。
動作環境
gcc 等の C コンパイラが使用可能な Linux 環境。Windows でコンパイルするには Makefile の修正がいるかも...
install 方法(いつもの make install です)
- DrkEncode.tar.gz をサーバ内の適当なところへ FTP して下さい。
- tar xvfz DrkEncode.tar.gz
cd Drk-Encode-1.0x
perl Makefile.PL
make install
- Jcodeとのベンチマークをとりたい方は、 t/bench.pl を実行下さい。
NAME
SYNOPSIS
use Drk::Encode;
my $m = Drk::Encode->new({ASCII=>1, KANA=>0});
my $zenkaku = 'ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ
ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマ
ムメモャヤュユョヨラリルレロヮワヰヱヲンヴ「、。・゛゜ー」
!”#$%&’()*+,ー./0123456789:;<=>?@
ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_`
abcdefghijklmnopqrstuvwxyz{|}〜
';
print $m->z2h($zenkaku,'euc');
my $hankaku = 'ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ
ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマ
ムメモャヤュユョヨラリルレロヮワヰヱヲンヴ「、。・゙゚ー」
!"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO
PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~
';
print $m->h2z($zenkaku,'euc');
DESCRIPTION
METHODS
new()
new( ASCII => 0||1 )
new({ ASCII => 0||1, KANA => 0||1 } )
引数無しの時は、{ASCII =>0, KANA => 1} がデフォルト値となる。
ASCII => 0 の時 ASCII 文字は変換対象外
ASCII => 1 の時 ASCII 文字は変換対象
KANA => 0 の時 カナ 文字は変換対象外
KANA => 1 の時 カナ 文字は変換対象
z2h( $string)
z2h( $string, 'euc'||'sjis' )
z2h( $string, 'euc'||'sjis', 0||1 )
z2h( $string, 'euc'||'sjis', { ASCII => 0||1, KANA => 0||1 } )
引数無しの時は、'euc', {ASCII =>0, KANA => 1} がデフォルト値となる。
'euc' の時は $string を 'euc' と見なす。'sjis' の時は $string を 'sjis' と見なす。
文字コードの自動判定は実装されていないので明示的に指定下さい。
ASCII => 0 の時 ASCII 文字は変換対象外
ASCII => 1 の時 ASCII 文字は変換対象
KANA => 0 の時 カナ 文字は変換対象外
KANA => 1 の時 カナ 文字は変換対象
h2z( $string )
h2z( $string, 'euc'||'sjis' )
h2z( $string, 'euc'||'sjis', 0||1 )
h2z( $string, 'euc'||'sjis', { ASCII => 0||1, KANA => 0||1 } )
引数無しの時は、'euc', {ASCII =>0, KANA => 1} がデフォルト値となる。
'euc' の時は $string を 'euc' と見なす。'sjis' の時は $string を 'sjis' と見なす。
文字コードの自動判定は実装されていないので明示的に指定下さい。
ASCII => 0 の時 ASCII 文字は変換対象外
ASCII => 1 の時 ASCII 文字は変換対象
KANA => 0 の時 カナ 文字は変換対象外
KANA => 1 の時 カナ 文字は変換対象
imode_enc( $string )
$stringは sjis 変換済みが前提です。
imode_dec( $string )
$stringは sjis 変換済みが前提です。
EXAMPLES
use strict; use Drk::Encode; my $m = Drk::Encode->new({ASCII=>1, KANA=>0}); my $zenkaku = 'ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマ ムメモャヤュユョヨラリルレロヮワヰヱヲンヴ「、。・゛゜ー」 !”#$%&’()*+,ー./0123456789:;<=>?@ ABCDEFGHIJKLMNOPQRSTUVWXYZ[¥]^_` abcdefghijklmnopqrstuvwxyz{|}〜 '; print $m->z2h($zenkaku,'euc'); my $hankaku = 'ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾ ダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマ ムメモャヤュユョヨラリルレロヮワヰヱヲンヴ「、。・゙゚ー」 !"#$%&()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNO PQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ '; print $m->h2z($zenkaku,'euc');
コメントやシェアをお願いします!
kazuyan
はじめまして。
非常に良いモジュールなので、過去にも何台かのサーバーに入れさせてもらっていましたが、
今回、新らしいサーバーにも入れようと思い、DLしようと試みたのですが、
なぜか wget できません。
wget "http://www.drk7.jp/cgi-bin/DLsys/DLsys.cgi?lay=26"としてもダメでした。
以前は、できていたと思うのですが、、、。
drk
sakaさん>随分と遅れましたが、カナのon/offを実装しました。
saka
はじめまして。私の場合、カナのON/OFFが欲しいです。
ASCII(英数字、記号)のみ変換したいので。
お時間があれば、お願い致します。<(_ _)>
drk
スペース(SP)の半角/全角、全角/半角変換をサポートしました。単純に忘れていただけでした (^^ゞ
質問
Asciiも変換対象にしていただいたみたいです。
しかし、スペース(SP)の半角/全角,全角/半角変換がされないみたいです。
通常、Asciiといえば、SP は含まれますが、
これは仕様でしょうか?
drk
実はこのバグ、僕も昨日気がつきました。早速修正版をUPしましたので、お試し下さい。
バグ報告
すいません。間違いがございました。
小文字のv,wではなく大文字のV,Wです
バグ報告
小文字のvを変換すると全角のWに
小文字のwを変換すると全角のVになるようです。
drk
コメント有り難うございました。早速ご要望の機能を搭載いたしました。この機能搭載によりコンストラクタの仕様が変更になりました。後、変換ロジックを見直したので、前回の3倍程度高速化されています。これでJcodeの30倍の高速化が実現できております。
Tamuzou
半角全角変換ライブラリとのことなので、カナだけではなく英字や記号も半角全角変換できなくては都合が悪いと思われます。