Perl TIPS

Encode モジュール簡単な使い方

Encode モジュール簡単な使い方

文字コードの判別 - 文字コードの変換 - 文字コードの変換 ( 変換元文字コードの自動判別 ) - 変換できる文字コード - 文字コードの alias を定義する
Perl 5.8 から標準で Encode モジュールが含まれるようになりました。いままで jcode.pl や Jcode.pm を別途インストールしていたのですが、その手間が省け精神的にも楽です。そして何よりも変換速度は早いようです。

Perl 5.8 からは文字コードの取り扱いが変わったようで、Perl 内部で独自の文字コード管理をしております。( 内部的には Unicode? )

Encode モジュール簡単な使い方-てすと

Encode モジュールは、
・Perl 内部文字管理 => Encode モジュール => 出力 ( printf 等 )
というようにフィルタとしても動作することが可能なようです。

新しく実装された( ? ) PerlIO というものを経由して open 関数でも使用できます。

TIPS として書いてますが、よく使い方が分からない所があり、ここに書いてあるのが正しいのかどうか良く分かりません。動作した範囲で書いてみました。
しかし Encode モジュールはまだ動作が良く分からないし、Jcode.pm の方が文字コードをちゃんと判別できるので Encode モジュールは使ってません。
できれば Jcode.pm のように勝手に判別してくれるとありがたいです。
使い方の詳しい方教えて下さい。


文字コードの判別

スカラ変数に含まれている文字列の文字コードを判別するには Encode::Guess モジュールを使用します。
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;

my $data = 'テスト元の文字コードは SJIS';
my $enc	 = guess_encoding( $data );

if( ref $enc ){
	print $enc->name,"\n";
}else{
	print $enc,"\n";
}

これで文字コードが表示されます。コンソールには 'shiftjis' と表示されるはずです。しかし文字コードが判別出来ない場合は 'shiftjis or euc-jp' という表示がされます。

判別できない場合は guess_encoding の返り値がオブジェクトじゃなくて、その候補が 'shiftjis or euc-jp' という文字列で返されるようです。( 変なの? )
たとえば上の my $data = '結論'; として見て下さい。'shiftjis or euc-jp' と表示されます。

Jcode.pm を使うと '結論' という文字も 'shiftjis' とちゃんと判別されますが、Encode モジュールだと何故か 'shiftjis or euc-jp' となってしまいます。

この様な書き方もあります。
my $enc = guess_encoding( $data, qw/ euc-jp shiftjis 7bit-jis /);

文字コードの変換

スカラ変数に含まれている文字列の文字コードを変換するには Encode モジュールに含まれている from_to を使用します。
use Encode qw/ from_to /;

my $data = 'テスト元の文字コードは SJIS';
from_to( $data, 'shiftjis', 'euc-jp' );
print $data;
これで $data の文字列が shiftjis から euc-jp に変換されて出力されました。

文字コードの変換 ( 変換元文字コードの自動判別 )

from_to を使用して文字コードの変換はできましたが、ここで問題は from_to を使用する時に、変換元の文字コードを指定しなければならない事です。
つぎに変換元の文字コードを自動判別してから、希望の文字コードへ変換して見ます。
use Encode qw/ from_to /;
use Encode::Guess qw/ euc-jp shiftjis 7bit-jis /;

my $data = 'テスト元の文字コードは SJIS';
my $enc	= guess_encoding( $data );
my $from= $enc->name;
my $to	= "euc-jp";

from_to( $data, $from, $to );

print $data;

Encode::Guess モジュールを使用して文字コードを自動判別してから文字コードを変換しました。これなら便利ですね。

変換できる文字コード

変換できる日本語の文字コードは以下のようにすると得る事が出来ます。
use Encode qw/ from_to /;

@list = Encode->encodings("Encode::JP");
foreach my $i ( sort @list ){ print "$i\n"; }

文字コードの alias を定義する

Encode::Alias モジュールを使用して文字コードの alias を定義することができます。
このモジュールを使用すると、
use Encode::Alias;

define_alias( 'Shift_JIS' => 'shiftjis' );

my $data = 'テスト元の文字コードは SJIS';
from_to( $data, 'Shift_JIS', 'euc-jp' );
という使い方が出来ます。

Windows TIPS

停止した方が良いサービスなど - MouseWare の不具合解消 - VMWare 4.0 - Netmeeting デスクトップ共有 - PPTP stateful / stateless - WindowsXP 最適化

停止した方が良いサービスなど

loadqm.exe - Adobe Gamma Loader - WMDM PMSP Service - QuickTime6 qttask.exe - Money サイド - Adobe Online Manager

loadqm.exe

IE6 や MSN メッセンジャーをインストールすると常駐するスパイウェアらしい。c:\winnt\loadqm.exe の名前を変更して起動しないようにする。
レジストリを書き換えても起動しないようにできるが、面倒なのでファイル名を書き換えてしまう。

Adobe Gamma Loader

ガンマ補正をするらしい。スタートアップから削除。

WMDM PMSP Service

C:\Winnt\system32\mspmspsv.exe
Windows Media Player7以降をインストールすると追加されるサービス。SDMI準拠のポータブルデバイスに音楽を転送する予定が無いのならば「手動」 あれば「自動」
mspmspsv.exe の起動を留められる。

QuickTime6 qttask.exe

qttask.exe のファイル名を変更する。

Money サイド

Money2002 をインストールすると入る。IE を起動しツールバーから Money サイドを選択する。
Money サイドのヘルプ => 設定を選択し、Money サイドを開かないを選択する。
urlmap.exe の起動を止められる。

Adobe Online Manager

どこか忘れましたが掲示板で見ました。引用します。

>以下の実行でオンラインでのadobeへの情報送信を防げます。
>
>Illustrator 9 or Photoshop 6.0 以降
>
>インストールする前にネット接続を切ります。
>インストール後、システムフォルダから以下のものを削除する事。
>
>AdobeOnline Inventory
>Adoberegistrationenjpn.html
>(日本語版の場合、以下の3つはありません)
>Adoberegistrationeng.html
>Adoberegistrationenu.html
>Adoberegistrationfra.html
>AdobeWeb.dll
>AOM(移動)

MouseWare の不具合解消

スクロールさせた時に、勝手にどんどんスクロールしてしまう不具合を解消する ( 処理のタイミングが間に合わないらしい )
MouseWare 本体である EM_EXEC.exe の優先度を高にする。
レジストリの
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Run\EM_EXEC
の内容が
"C:\PROGRA~1\Logitech\MOUSEW~1\SYSTEM\EM_EXEC.EXE"
になってたとすると、それを
"cmd /c start /d "C:\PROGRA~1\Logitech\MOUSEW~1\SYSTEM\" /high EM_EXEC.EXE"
と書き換える。

VMWare 4.0

Snapshot

Snapshot

1. Snapshot をとる
2. OS を起動する
3. 作業をする
4. 電源を切る
5. 選択 Just Power Off
6. 再起動
7. 3. の作業は更新されている
8. 作業をする
9. 電源を切る
10.選択 Revert to Snapshot
11.再起動
12.状態は 1. に戻っている
13.作業をする
14.電源を切る
15.選択 Take Snapshot
16.Snapshot の作成時間が更新される
16.再起動
17.13. の作業は更新されている
18.電源を切る
19.選択 Just Power Off
20.Remove snapshot
21.1 以前の状態に戻る

常に一定の状態を保ちたい場合、
1. 一定に保ちたい状態に OS をする。
2. snapshot を取る
3. Virtual Machine Configuration -> options -> snapthot
Lock this snapshot にチェック
When Powering Off -> Revert to the snapshot
を選択する。

Netmeeting デスクトップ共有

Windows 2000 で Netmeeting のデスクトップ共有を有効にして有り、外部から接続した場合に以下の事を実行するとアイコンの色が 16色になってしまう。

デスクトップの色を 256色に変更する。

1. 窓の手でアイコンの色を High カラーに変更する。
2. Netmeeting のデスクトップ共有を無効にする
3. 一旦ログオフか再起動をすると元に戻る。

PPTP stateful / stateless

PPTP の接続方法で stateless ( historyless ) と stateful という方法があります。
Linux で ppp + poptop で接続する場合は要注意。stateful だと ppp のバグで接続できません。

Win2000とかではデフォルトでstatelessで、
HKLM\SYSTEM\CurrentControlSet\Services\NdisWan\Parameters
の historyless DWORDプロパティ値に 0 を設定すると stateful になります

パケットがロストするかもしれない環境では stateless に設定した方が良いパフォーマンスが出るようです。

WindowsXP 最適化

ユーザ操作を追跡する機能を無効化する - ダンプを取らない - 綺麗なフォントにする

ユーザ操作を追跡する機能を無効化する

レジストリ
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Policies\Explorer
新しい DWORD 値:「NoInstrumentation」を16進で「1」に設定する

ダンプを取らない

ファイル名を指定して実行で drwtsn32 と入力しワトソン博士を起動する。
オプションをすべて外す

綺麗なフォントにする


ARISAKA-AA 11pt

その他

GV-BCTV7

GV-BCTV7

TV 視聴中に音が消えてしまう不具合は DirectX 9.0a => 9.0b へバージョンアップした後、Non-NTSC TV Tuner Hotfix をあてたら直りました。

Hotfix
http://www.microsoft.com/downloads/details.aspx?FamilyID=8dfd1b6d-
e177-4a0e-91d0-b4310675b02b&displaylang=ja

Linux Tips

Vi のタブカラム数を変更する。 - find の面白い使い方 - CD-R - gcc-3.2 での kernel コンパイル - procmail レシピ

Vi のタブカラム数を変更する。

/~.vimrc ファイルに
set tabstop=4
と書き込む。タブカラムを 8 にする場合は tabstop=8 にする。

find の面白い使い方

特定のファイル名・拡張子のファイルを探す
find / -name "*.eml"

出力フォーマットを指定する。フルパスと日付を表示
find / -printf "%p %Ac\n"

"Thu Sep 20 15:46:58 2001" のタイムスタンプを持つファイルを
探し、フルパスを allnimda.txt ファイルへ出力
find / -printf "%p %Ac\n" |grep "Thu Sep 20 15:46:58 2001" |cut -d " " -f1 > allnimda.txt

↑nimda に感染したときにこんな事したなぁ。

CD-R

昔こうやって Linux で CD-R を焼いた。いまはどうだか知らん。

# mkisofs -a -d -D -N -J -T -o /home/backup.img /home/backup/Software\ Archive/
# cdrecord dev=0,0 speed=2 -v -data /home/backup.img

gcc-3.2 での kernel コンパイル

kernel の make で、stdarg.h , varargs.h , stddef.h が見つからない
gcc-3.2-1.i386.rpm を使っている場合に、kernel-2.4.19 以降をコンパイルする際に、必要なヘッダファイルが読み込めない件について。

解決策 1
ソースディレクトリ直下の Makefile を以下のように修正します。

85 #
86 # standard CFLAGS
87 #
88
89 CPPFLAGS := -D__KERNEL__ -I$(HPATH) -I/usr/lib/gcc-lib/i386-redhat-linux/3.2/include
90
91 CFLAGS := $(CPPFLAGS) -Wall -Wstrict-prototypes -Wno-trigraphs -O2 \
92 -fno-strict-aliasing -fno-common
93 ifndef CONFIG_FRAME_POINTER
94 CFLAGS += -fomit-frame-pointer
95 endif
96 AFLAGS := -D__ASSEMBLY__ $(CPPFLAGS)
97

procmail レシピ

単純に転送する。コピーはサーバに残しておく。

:0c
! hoge@hogehoge.com

Home に戻る


Last Updated : 2006-4-15

Copyright © 2006 Mikio Fukushima. All rights reserved.
http://smart-pda.net

Converted by Outliner