【ドラマ】『SUPERNATURAL スーパーナチュラル シーズン1』の感想【おすすめ】
GyaO!でドラマ『スーパーナチュラル シーズン1』を視聴した感想。2005年からアメリカで放映されているドラマシリーズ。ジャンルは、アクション、ホラー、サスペンス。
SUPERNATURAL スーパーナチュラル シーズン1|無料動画 GyaO![ギャオ]|ドラマ・アジア
化け物退治を生業にしているウィンチェスター一家のお話。ウィンチェスター家の主であるジョンの妻メアリーが『何かわからない物』に殺害される。これによりジョンは化け物退治を生業にするようになる。息子のディーンとサムも子供の頃から化け物退治の技術をジョンに叩き込まれながら育てられるが、サムはそんな生活がいやで家をでて大学生活をエンジョイしていた。しかし、ある日兄のディーンがサムの元を訪れ父ジョンが行方不明になったことを告げる。
面白い。おすすめ。アクションあり、ホラーあり、サスペンスありで話に引き込まれる。クオリティーも映画を見ているようである。話自体には1本大きな筋が通っているが、基本的には1話完結のロードムービー仕立て、アメリカさんお得意のロードムービー仕立てなんですよ。なのでプロット的には『トラック野郎B.J』等の時代から変わらないコンビで事件を解決していくというおはなしです。これはもうアメリカのドラマのお約束と言ってもいい感じで、見た目は最新の技術をつかった最近の映画の様な感じなのですがその根底には『アメリカン・ヒーロー』や『ナイトライダー』の頃から変わらないコンビで事件を解決していくという王道中の王道だったりします。そこに、いまどきの新しい要素を組み込んで面白い作品になっています。
なんだか公式サイトを見るとマッドハウスによってアニメ化されているみたいですがちょっと予告編見たけど、オリジナル作品なら良かったのかも知れないが、実写版を見た後だと実写よりいいとは思わなかった。実写で既に完成されているのにアニメ化する意味が分からない。アニメ化する必要性を全く感じなかった。なんか見ていると恥ずかしくなってくる。
日本のアニメ作品が邦画で実写化するとがっかり化するのと逆のパターンになっている。
[Windows XP]検索機能が機能しない件
最近、エクスプローラ(Explorer)の検索機能を利用してもファイルが探せなくなっていたので、「あれ?元々こんな感じだったっけ?」といった感じでスルーしていましたが、やっぱりおかしいと思ってちゃんと調べてみました。もう少し正確に言うと、[ファイルとフォルダ全て]で検索したときに[ファイル名のすべて又は一部]と[ファイルに含まれる単語または句]を指定してファイルを絞り込んで検索したときに[ファイルに含まれる単語または句]で指定した単語が含まれるファイルが存在するにもかかわらず検索にヒットしないという状態になっていました。幸い秀丸エディタのgrep機能が優秀なのでそちらを使って検索していましたが今回ちゃんとエクスプローラの方の問題を解決することにしました。
本来の動作
具体的には下の手順で検索しました。
[ファイル名のすべて又は一部]に『*.*』ワイルドカード(全てのファイルを対象)[ファイルに含まれる単語または句]に『占い』、[探す場所]に『猫』を指定して[検索]をクリック。
本来であれば下のように4つのファイルがマッチするはずのところが全くヒットしない状態になっていました。
解決方法
下記のリンク先のマイクロソフトサポートオンラインの解決方法を行なうことで解決しました。方法は2通り示されていましたが、私は方法2を行って解決しました。方法2の方が手軽に実行出来ると思います。
下に具体的な方法2のやり方を画像付きで分かりやすく解説します。
- [スタート]ボタンをクリックして、メニューから[検索]をクリックします。
- 検索画面が開いたら、[設定を変更する]をクリック。
- [検索コンパニオンをどのように使いますか?]の画面で[インデックスサービスを使う(ローカル検索を早くする)]をクリック。
- [インデックスサービス]の画面で[インデックスサービスの設定を変更する(詳細)]をクリックする。※インデックスサービスを有効にする必要は有りません。
- [インデックス サービス]の画面が表示されるのでツールバーの[コンソールツリーの表示/非表示]のアイコンをクリックします。
クリックすると下のようにコンソールツリーが表示されます。 - コンソールツリーの[インデックスサービス – ローカルコンピュータ]を選択してマウスの右クリックで表示されるメニューから[プロパティ]を選択クリックします。
- [インデックス サービス – ローカル コンピュータのプロパティ]の画面が開いたら、[未登録の拡張子のファイルにインデックスを付ける]にチェックを入れて[OK]ボタンをクリックします。
- これで設定は完了です。
最初に書いた様に期待したとおりに検索出来るようになりました。
今まで設定の為に開いた画面などはすべてとじて結構です。
タグ : Windows, Windows XP
Location::GeoToolを使って測地系変換ウェブアプリを作ってみた。
Location::GeoToolを使って日本測地系と世界測地系を相互に変化するウェブアプリを作ってみました。
何気にajaxとか使って非同期通信でページのリロードしないようにしたり
MovableType(MT)のウェブページ機能を使って専用のページを作ってみたり(通常のブログのエントリーのページとは別に独立したページを作る機能)
と色々遊んでいます。
タグ : Ajax, cgi, javascript, MovableType, MT, perl
JavaScriptとFlashを利用してクリップボードへのコピー機能を提供するzeroclipboard
よく、ブログパーツやアフィリエイトのサイトなどでタグを取得する際にクリップボードにコピーするというボタンがあってそれをクリックするとクリップボードにデータをコピーしてくれるという機能があったりします。
IEだとclipboardData.getDataやclipboardData.setDataを使ってクリップボードにデータを設定したりクリップボードからデータを取得したり簡単に出来るんですが、その他のブラウザではこの機能はつかえません。
そこで、JavaScriptとFlashを組み合わせて利用しクリップボードにデータを設定するというライブラリがいくつか存在するのですが、そのなかの一つzeroclipboardを使って実際にやってみました。最近はGoogle Chromeを使うことが多いので自作のウェブアプリなどでクリップボードにコピーする機能が使えなくて不便でした。
実際に下の『IPアドレス・ツールズ』に組み込んでみたところGoogle ChromeでもCOPYボタンが使えるようになって便利になった。
しかし、id毎にzeroclipboardを使うためのオブジェクトを作成せねばならず。関数化して汎用的に使えないのでソースが大きくなってしまうのが難点。
あと残念なのはペースト機能がないこと。クリップボードに関してはブラウザ共通の規格がほしいですね。
設置自体は難しくないので下のサイトの実際のコードを見れば分かると思います。
Instructions – zeroclipboard – Project Hosting on Google Code
軽く説明しておくと
上記のサイトからzeroclipboardをダウンロードして展開後、使いたいページのディレクトリにアップロードしておきます。
ZeroClipboard.jsの下の赤字の部分にZeroClipboard.swfへのパスを書いて上書きアップロードします。
// Simple Set Clipboard System
// Author: Joseph Huckaby
var ZeroClipboard = {
version: "1.0.7",
clients: {}, // registered upload clients on page, indexed by id
moviePath: ‘https://blog.kumacchi.com/gagagagaga/country/zeroclipboard/ZeroClipboard.swf’, // URL to movie
nextId: 1, // ID of next movie
あとは下のような感じで利用します。
<html>
<body>
<script type="text/javascript" src="./zeroclipboard/ZeroClipboard.js"></script>
<input type="text" name="text01" value="あいうえお" id="copy_text01">
<input type="button" name="button01" value="コピー" id="copy_button01">
<script language="JavaScript">
var clip = new ZeroClipboard.Client();
clip.setText( copy_text01.value );
clip.glue( ‘copy_button01’ );
</script>
</body>
</html>
動作サンプル
タグ : Flash, javascript
【perlメモ】測地系変換モジュール『Location::GeoTool』のサンプル
測地系には大まかに日本で使われている日本測地系 北緯dd°mm.ss 東経dd°mm.ss(ddd.mm.ss.nnn)という形式と世界測地系(ddd.dddddd…)という形式です。
Googleマップは世界測地系、マピオンやYahoo!は日本測地系だったりするのでお互いのデータを相互に利用する場合には変換が必要になります。
perlのCpanモジュール『Location::GeoTool』を利用して実際に変換してみました。Location::GeoToolのサンプルコードをそのまま流用しています。
元の座標は例の尖閣諸島の衝突位置を日本測地系から、世界測地系に変換してみました。
データの出力フォーマットが色々変えられるので色々表示しています。マピオンのURL用の出力フォーマットなどもあって工夫次第で色々便利に使えそうです。
Location::GeoTool – search.cpan.org
use Location::GeoTool;
# New constructor (Options can be set)
my $oGeo = Location::GeoTool->new({changeMyself => 0,enableWantarray => 0});
# $oGeo->set_coord(‘35.39.24.491′,’139.40.10.478′,’tokyo’,’gpsone’);
$oGeo->set_coord(‘26.01.07′,’123.37.1′,’tokyo’,’gpsone’);
# $oGeo->set_coord(‘26.0186111111111′,’123.616944444444′,’wgs84′,’degree’);
# Old constructor
# my $oGeo = Location::GeoTool->create_coord(‘35.39.24.491′,’139.40.10.478′,’tokyo’,’gpsone’);
my @mapion = $oGeo->format_mapion->array;
# => ("35/39/24.491","139/40/10.478")
foreach my $g (@mapion){
print "format_mapion:$g\n";
}
print "mapion lat:".$oGeo->format_mapion->lat,"\n";
print "mapion long:".$oGeo->format_mapion->long,"\n";
my $oGeoW = $oGeo->datum_wgs84;
foreach my $g (@oGeoW){
print "datum_wgs84:$g\n";
}
print "degree lat:".$oGeo->format_degree->lat,"\n";
print "degree long:".$oGeo->format_degree->long,"\n";
my @wgs84 = ($oGeoW->lat,$oGeoW->long);
# => ("35.39.36.145","139.39.58.871")
foreach my $g (@wgs84){
print "wgs84:$g\n";
}
my @degree_wgs84 = $oGeoW->format_second;
# => (128376.14524…,502798.87076…)
foreach my $g (@degree_wgs84){
print "degree_wgs84:\n";
foreach my $x(keys %{$g}){
print "$x = ${$g}{$x}\n";
}
}
実行結果
F:\kumacchi\MyProgram\perl\sample\GeoTool>perl geotool01.pl
format_mapion:26/01/07.000
format_mapion:123/37/01.000
mapion lat:26/01/07.000
mapion long:123/37/01.000
degree lat:26.0186111111111
degree long:123.616944444444
wgs84:26.01.21.401
wgs84:123.36.55.337
degree_wgs84:
source =
def_format = gpsone
out_datum = wgs84
defaultFormat = gpsone
alt = +000000
lat = 26.01.07
cache_long =
out_format = second
cache_lat =
changeMyself = 0
long = 123.37.1
defaultDatum = wgs84
def_datum = tokyo
enableWantarray = 0
F:\kumacchi\MyProgram\perl\sample\GeoTool>
昔HSPLetで作ったウェブアルバムがGoogle Chromeで動かないので調べてみた。
上記で昔HSPLetで作ったウェブアルバムがGoogle Chromeで表示されないので調べてみました。
下のようなアルバムなんですが、普通に画像を見るモードとスライドショー機能があります。
メモがある場合は、memoというアイコンが表示されているので画面上で右クリックするとメモが表示されるようになっています。
結局、objectタグではなくappletタグを使えばどのブラウザ(IE,Firefox,Chrome)でも表示されることがわかりましたので、タグをappletタグに置き換えたhtmlに差し替えました。
実際には下の様になりました。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<!– $Id: template.html,v 1.4 2006/01/22 16:00:59 Yuki Exp $ –>
<html xmlns="http://www.w3.org/1999/xhtml" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=Shift_JIS" />
<meta http-equiv="Content-Script-Type" content="text/javascript" />
<meta http-equiv="Content-Style-Type" content="text/css" />
<link rel="stylesheet" href="album.css" type="text/css">
<title>REOTAN’S GALLERY</title>
</head>
<body>
<script type="text/JavaScript">
<!–
self.moveTo(0,0);
self.resizeTo(screen.availWidth,screen.availHeight);
self.focus();
//–>
</script>
<div id="box">
<applet code="hsplet.Applet.class" width="1024" height="600">
<param name="archive" value="album.jar,hsplet.jar" />
<param name="classid" value="java:hsplet.Applet.class" />
<param name="startClass" value="start" />
<script type="text/javascript">
<!–
var now = new Date();
document.write(‘<param name="cmdline" value="’+ now.toLocaleString() + ‘" />’);
// –>
</script>
</applet>
</div>
</body>
</html>
参考:
【perlメモ】Algorithm::NaiveBayesモジュールを使ったスパム判定
上記の記事を踏まえて、スパムフィルタリングの処理を作ってみた。
準備
まず、spamというフォルダとhamというフォルダを作成。
spamフォルダの中にスパムメール数十通分のテキスト(shiftjis)を格納。
hamフォルダの中に普通のメール数十通分のテキスト(shiftjis)を格納。
スパム情報を格納したテキストファイル(spam.txt)を作成するスクリプト
spam.pl(utf8)
use Strict;
use Warnings;
use utf8;
use Encode qw/from_to decode_utf8 encode_utf8 encode decode/;
use Encode::Guess qw/ascii euc-jp 7bit-jis cp932/;
use Text::Kakasi;
my %ha =();
opendir(DIR,’./spam’);
while(my $file = readdir(DIR)){
next if($file eq ‘.’);
next if($file eq ‘..’);
print "file = [$file]\n";
$/ = undef;
open(FILE,"./spam/$file");
my $text = <FILE>;
close(FILE);
$/ = "\n";
$text = decode("Guess",$text);
$text =~ s/\x0a//g;
$text =~ s/\x0d//g;
$text =~ s/ / /g;
$text = encode(‘cp932’,$text);
my $res = Text::Kakasi::getopt_argv(‘-w’);
my $str = Text::Kakasi::do_kakasi($text);
my @a = split(/ /,$str);
foreach my $key (@a){
my $utf8 = decode(‘cp932’,$key);
next if(length($utf8) < 2);
next if(length($utf8) > 30);
$ha{"$utf8"}++;
}
}
closedir(DIR);
open(FILE,">spam.txt");
binmode FILE,’:utf8′;
foreach my $key(sort {$ha{$b} <=> $ha{$a}} keys %ha){
print FILE join("\t",$key,$ha{$key},"\n");
}
close(FILE);
実行結果
F:\kumacchi\MyProgram\perl\sample\Bayes>perl spam.pl
file = [Export000000.eml]
file = [Export000001.eml]
file = [Export000002.eml]
file = [Export000003.eml]
file = [Export000004.eml]
file = [Export000005.eml]
file = [Export000006.eml]
file = [Export000007.eml]
file = [Export000008.eml]
file = [Export000009.eml]
file = [Export000010.eml]
file = [Export000011.eml]
file = [Export000012.eml]
file = [s1.txt]
F:\kumacchi\MyProgram\perl\sample\Bayes>
作成されたスパム情報を格納したファイルの抜粋。語と出現回数をTABで区切ったテキストを並べたファイルです。
spam.txt
メール 13
!! 13
2010/11/11), 13
-*- 12
男性 12
yahoo.co.jp 12
人妻 12
to 12
融資 12
and 11
登録 10
you 10
下さい 10
Thu, 10
など 10
相手 10
(以下省略)
同様に以下のスクリプトでham.txtを作成。
ham.pl
use Strict;
use Warnings;
use utf8;
use Encode qw/from_to decode_utf8 encode_utf8 encode decode/;
use Encode::Guess qw/ascii euc-jp 7bit-jis cp932/;
use Text::Kakasi;
my %ha =();
opendir(DIR,’./ham’);
while(my $file = readdir(DIR)){
next if($file eq ‘.’);
next if($file eq ‘..’);
print "file = [$file]\n";
$/ = undef;
open(FILE,"./ham/$file");
my $text = <FILE>;
close(FILE);
$/ = "\n";
$text = decode("Guess",$text);
$text =~ s/\x0a//g;
$text =~ s/\x0d//g;
$text =~ s/ / /g;
$text = encode(‘cp932’,$text);
my $res = Text::Kakasi::getopt_argv(‘-w’);
my $str = Text::Kakasi::do_kakasi($text);
my @a = split(/ /,$str);
foreach my $key (@a){
my $utf8 = decode(‘cp932’,$key);
next if(length($utf8) < 2);
next if(length($utf8) > 30);
$ha{$utf8}++;
}
}
closedir(DIR);
open(FILE,">ham.txt");
binmode FILE,":utf8";
foreach my $key(sort {$ha{$b} <=> $ha{$a}} keys %ha){
print FILE join("\t",$key,$ha{$key},"\n");
}
close(FILE);
実行結果
F:\kumacchi\MyProgram\perl\sample\Bayes>ham.pl
file = [Export000000.eml]
file = [h1.txt]
file = [mail_ham1.txt]
F:\kumacchi\MyProgram\perl\sample\Bayes>
できかがったham.txtの抜粋
ham.txt
XP 182
製品 129
.NET 124
Windows 109
キャンペーン 107
Office 106
マイクロソフト 102
Microsoft 97
情報 90
2002 82
Visual 77
ユーザー 76
2001 73
登録 72
電子メール 69
(以下省略)
スパム判定プログラム
上記で作成したデータを元にスパム判定を行なうスクリプト
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
use Algorithm::NaiveBayes;
use Encode qw/from_to encode decode decode_utf8/;
use Encode::Guess qw/ascii euc-jp 7bit-jis cp932/;
use Text::Kakasi;
use Data::Dumper;
{
no warnings ‘all’;
package Data::Dumper;
sub qquote { return shift; }
}
$Data::Dumper::Useperl = 1;
my $nb = Algorithm::NaiveBayes->new;
my %ham = &getHash("ham.txt");
$nb->add_instance(attributes => {%ham}, label => ‘ハ ム’
);
my %spam = &getHash("spam.txt");
$nb->add_instance(attributes => {%spam},label => ‘スパム’);
$nb->train;
my %mail = &getTexthash($ARGV[0]);
my $result = $nb->predict(attributes => {%mail});
my $dump = Dumper($result);
binmode STDOUT,’:encoding(cp932)’;
print $dump;
my $cnt=0;
foreach my $key(sort { ${$result}{$b} <=> ${$result}{$a} } keys %{$result}){
$cnt++;
print "$cnt $key = ${$result}{$key}\n";
}
#====================================================================
#
#====================================================================
sub getHash{
my $file = shift;
my %hash = ();
open(FILE,$file);
while(<FILE>){
chomp;
my ($key,$num) = split(/\t/);
$hash{"$key"} = $num;
}
close(FILE);
%hash;
}
#====================================================================
#
#====================================================================
sub getTexthash{
my $file = shift;
print $file,"\n";
my %hash = ();
$/ = undef;
open(FILE,$file);
my $text = <FILE>;
close(FILE);
$/ = "\n";
$text = decode("Guess",$text);
$text =~ s/\x0a//g;
$text =~ s/\x0d//g;
$text =~ s/ / /g;
$text = encode(‘cp932’,$text);
my $res = Text::Kakasi::getopt_argv(‘-w’);
my $str = Text::Kakasi::do_kakasi($text);
my @a = split(/ /,$str);
foreach my $key (@a){
my $utf8 = decode(‘cp932’,$key);
next if(length($utf8) < 2);
next if(length($utf8) > 30);
$hash{"$utf8"}++;
}
%hash;
}
適当なスパムメールのファイルを渡してスパム判定してみたところ
F:\kumacchi\MyProgram\perl\sample\Bayes>perl bayes03.pl mail_spam02.txt
mail_spam02.txt
$VAR1 = {
スパム => 1,
ハ ム => ‘4.75135128115554e-038’
};
1 スパム = 1
2 ハ ム = 4.75135128115554e-038
F:\kumacchi\MyProgram\perl\sample\Bayes>
適当は普通のメールで判定してみたところ。
F:\kumacchi\MyProgram\perl\sample\Bayes>perl bayes03.pl mail_ham.txt
mail_ham.txt
$VAR1 = {
スパム => ‘0.136732677614051’,
ハ ム => ‘0.990607982439316’
};
1 ハ ム = 0.990607982439316
2 スパム = 0.136732677614051
F:\kumacchi\MyProgram\perl\sample\Bayes>
ちゃんと判定出来ています。帰ってくる値は0~1の値です。
『4.75135128115554e-038』は一見大きな値に見えますが、数値の最後に『e-038』と付いているのは指数表示なので、4.75135128115554×10の-38乗となり限りなく小さな値になります。
掲示板やブログに組み込んでみたいですね。
参考:
ゲームで英語を学べるlivedoor英語学習
ゲームしながら英語を学べるlivedoor英語学習をやってみた。なかなか面白い。英語わからないので少しでも英単語とか覚えられるといいな。ユーザー登録しなくてもとりあえず遊べるので、英語学習したい人は一度試してみてはいかがですか?
ゲームは何種類かあって、下は語を並べて正しい文を作るファクトリースクランブルというゲーム。
ゲームをクリアすると下のようにYOU WINの画面になります。
その後成績の画面になって
最後は、回答結果の一覧が表示されます。
スイカパニックは、日本語から正しい英単語を選ぶゲーム。
表示された日本語に対して正しい英単語をクリックします。
クリアすれば下の画面になります。
この後他のゲーム同様に成績の画面、回答一覧の画面になります。
他にも数種類のゲームがあります。
ゲームだけでなく動画やコミュニティ等、色々なコンテンツがあるので結構楽しめます。
こういう英語学習系のゲームコンテンツのサイトってもっといっぱいあるといいですよね。
とにかく英単語を遊びながらいっぱい覚えられるサイトが個人的には欲しいです。このサイトのコンテンツを遊びきったらどれくらい覚えられるのか興味があります。暇を見て時々遊んでみたいと思います。
【映画】『プレデター2』の感想
GyaO!で映画『プレデター2』を視聴した感想。1990年公開のアメリカ映画。ジャンルはSF、アクション。前作の3年後の公開。
ストーリー
前作の3年後の1990年の公開ではあるが、全開のプレデター襲来から10年後の1997年のロサンゼルスが舞台という設定になっている。ロサンゼルス市警のマイク警部。麻薬密売組織との銃撃戦を行っている最中にプレデターに獲物として目をつけられる。前作同様プレデターとの壮絶な闘いが展開される。
感想
まあまあ、面白い。前作と舞台は変われど基本的に同じ構成なので前作ほどのインパクトはない。主演は黒人俳優のダニー・グローヴァー映画『リーサル・ウェポン』シリーズのリッグス刑事の相棒のマータフ刑事役の人ですね。そんなにひどくはないけど色々前作の人気に任せた感じでストーリーの詰めの甘さが感じられる。
ネタバレ
牛肉が大好きで牛肉加工所に通うプレデターというのはちょっとどうなんだろう。あんな立派な宇宙船できてるんだから、ちゃんと食べ物位あるだろうに、かなり設定に違和感を感じる。
FBIバカス。赤外線しか見えないというのはわかるが、あれだけ進んだ文明なんだから赤外線以外を見る手段も持ってることぐらい小学生でも予想しそうなもんだとおもうんだけど。全開特殊部隊が全滅しかかったのに同じような人数でFBIだけで捕まえようとかちょっと無謀すぎる。
プレデターが前作に比べて弱体化してる感じがする。格闘戦で人間にやられちゃうとかどうなのよ。それなりにハラハラするけど格闘戦の最後の最後にリアリティーがない。前作のほうが追い詰められ感があるとおもう。
評価:
【perlメモ】perl5.8系utf8関連の自分用まとめ
とにかく慣れるまでめんどくさい。最初は訳がわからないが判っててくれば便利。jcode.plやjcode.pm時代より面倒でとっつきにくいのはたしか。こういう事を気にしないでコードを書ける日が来るといいな。
基本的には下の記事を抑えておけば大丈夫なはず。
- Perl 5.8.x Unicode関連
- 404 Blog Not Found:#perl – utf8::decode()ではなくEncode::decode_utf8()を使うべき理由
- 404 Blog Not Found:perl – use utf8;
最近はよほど古いソースのメンテでもなければutf8で書くと思うので、下の3行はお決まり。
use strict;
use warnings;
use utf8;
必要に応じて下の様にしたりする。
use strict;
use warnings;
use utf8;
use Encode qw/decode_utf8 encode_utf8 from_to/;
use Encode::Guess qw/ascii euc-jp shiftjis 7bit-jis/;
$ret = utf8::is_utf8($str);
utf8フラグが立っているかチェック。utf8フラグonの場合trueを返す。
utf8::encode($str);
utf8フラグをoffする。引数を直接変更する。
utf8::decode($str);
utf8フラグをonする。引数を直接変更する。
$ret = Encode::encode(“euc-jp”,$str);
utf8フラグがonの文字列を指定した文字列に変換しutf8フラグをoffにする。
utf8フラグがonの内部文字列(utf8)を指定した文字コードに変換しutf8フラグをoffする。
$ret = Encode::decode(“cp932”,$str);
$ret = Encode::decode(“Guess”,$str);
指定した文字コードで、指定した文字のutf8フラグをonにする。※文字コードの変換をしないことに注意。ここを勘違いするとハマる。 指定した字コード、指定した文字コードの文字列から内部コード(utf8)に変換してutf8フラグをonする。
Encode::from_to($str,”utf8”,”euc-jp”);
utf8フラグがoffの指定した文字列を指定した文字コードから文字コードへ変換する。引数が直接変化する。utf8フラグは変化しない。
$ret = Encode::encode_utf8($str);
指定した文字列のutf8フラグをoffする。
$ret = Encode::decode_utf8($str);
指定した文字列のutf8フラグをonする。既にonになってる部分についてはそのままコピーされる。不正な文字については\x{fffd}に置き換える。
※utf8::encodeとEncode::encodeを混同しないようにする。
とくにuse Encode qw/encode/;などして、パッケージ名を省略している場合には注意。
※セキュリティを考慮して内部のリテラルな文字列にはdecode、外部からの入力には不正な文字を[\x{fffd}]に置き換えるdecode_utf8を使う。なるべくdecode_utf8を使っとけばOK?
Encode::Guess
Jcodeのように元の文字コードがわからない状態からの文字コードの自動変換はEncode::Guessを使えば可能であるが、文字列が短いと誤認識しやすい。判定する場合例えば単語ではなくページ全体を渡して変換したほうが失敗しない。なるべくGuessに頼らない方が無難。どうしても単語単位でやる必要があるならJcode.pmを使ったほうがいいかも知れない(非推奨)。
use Encode::Guess qw/ascii euc-jp shiftjis 7bit-jis/;
Encode::from_to($str,’Guess’,”euc-jp”);
上記の場合[Use of uninitialized value]エラーが出る場合
use Encode::Guess qw/ascii euc-jp shiftjis 7bit-jis/;
$str = decode("Guess",$str);
こっちの方がいいかも
Wide caractor in print
test01.pl(utf8)
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
print "あいうえお\n";
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test01.pl
Wide character in print at test01.pl line 7.
縺ゅ>縺・∴縺・
F:\kumacchi\MyProgram\perl\sample\utf8>
Wide character問題はこう直す。
test02.pl(utf8)
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
binmode STDOUT,’:utf8′;
print "あいうえお\n";
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test02.pl
縺ゅ>縺・∴縺・
F:\kumacchi\MyProgram\perl\sample\utf8>
ついでにcp932(マイクロソフト拡張Shiftjis)に変換して出力するにはこう直す。
test03.pl(utf8)
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
binmode STDOUT,’:encoding(cp932)’;
print "あいうえお\n";
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test03.pl
あいうえお
F:\kumacchi\MyProgram\perl\sample\utf8>
ファイルに出力するときも上記と同様。
test04.pl(utf8)
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
use Encode;
$/ = undef;
open(FILE,"test03.pl");
my $str = <FILE>;
close(FILE);
$/ = "$\n";
$str = Encode::decode_utf8($str);
binmode STDOUT,’:encoding(cp932)’;
print $str;
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test04.pl
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
binmode STDOUT,’:encoding(cp932)’;
print "あいうえお\n";
F:\kumacchi\MyProgram\perl\sample\utf8>
utf8フラグをonにした状態で読み込む。
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
$/ = undef;
open(FILE,"<:utf8","test03.pl");
my $str = <FILE>;
close(FILE);
$/ = "$\n";
binmode STDOUT,":encoding(cp932)";
print $str;
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test05.pl
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
binmode STDOUT,’:encoding(cp932)’;
print "あいうえお\n";
F:\kumacchi\MyProgram\perl\sample\utf8>
読み込むファイルがShiftjis(CP932)の時utf8に変換してutf8フラグをonして読み込む。
test06.pl
#!/usr/bin/perl
use Strict;
use Warnings;
use utf8;
use Encode;
$/ = undef;
open(FILE,"<:encoding(cp932)","shiftjis.txt");
my $str = <FILE>;
close(FILE);
$/ = "$\n";
if(utf8::is_utf8($str)){
print "—– utf8 flag on\n";
}
binmode STDOUT,":encoding(cp932)";
print $str;
実行結果
F:\kumacchi\MyProgram\perl\sample\utf8>perl test06.pl
—– utf8 flag on
あいうえお
かきくけこ
さしすせそ
F:\kumacchi\MyProgram\perl\sample\utf8>
タグ : perlメモ