perl encode_utf8_to_euc-jp.pl < hogehoge_UTF8.txt > hogehoge_EucJP.txt
encode_utf8_to_euc-jp.pl
なお、私は encode_utf8_to_euc-jp.pl をeuc-jpで保存している。use Encode qw/ encode /;
use Encode qw/ decode_utf8 /;
@data = <STDIN>;
# http://blog.livedoor.jp/sasata299/archives/51186273.html
# http://d.hatena.ne.jp/kopug/20060903
foreach $ele (@data) {
$ele = decode_utf8($ele);
$ele =~ tr/[\x{ff5e}\x{2225}\x{ff0d}\x{ffe0}\x{ffe1}\x{ffe2}]/[\x{301c}\x{2016}\x{2212}\x{00a2}\x{00a3}\x{00ac}]/;
$ele = encode('euc-jp', $ele);
}
print @data;


UTF-8由来と思われる ¥x{...} という文字列が、Javascriptを走らせるのにエラーを発生させていた。 ##
— TAKAGI-1 高木 一さん (@takagi1) 8月 19, 2012
UTF-8 で書かれたファイル hogehoge.txt から、バッチファイル(.bat)に書かれた以下のコマンドで jcode.pl を使い、内容を Shift JIS にエンコードしファイル hogehoge_sjis.txt を作成する処理を実施していたところ、変換できない文字が ¥x{...} に変換された。
そして、他のプログラムによる処理を経て、Javascriptのファイルに ¥x{...} が書き込まれてしまい、¥マークによるエスケープが原因なのか、Javascriptが走らないという事象が発生した。perl -Mencoding=utf-8,STDOUT,shiftjis -pe1 < hogehoge.txt > hogehoge_sjis.txt
後で分かったことだが、
とするだけで、¥x{...} への変換はされなくなった。なお、cp932 は、Shift JIS と(ほぼ)同じである。perl -Mencoding=utf-8,STDOUT,cp932 -pe1 < hogehoge.txt > hogehoge_sjis.txt
しかし、今回はレガシーな jcode.pl ではなく、現在のスタンダードらしい Encode.pm を使った処理に変更した。
バッチファイル
encode_utf8_to_cp932.plperl encode_utf8_to_cp932.pl < hogehoge.txt >hogehoge_sjis.txt
(前述の処理と同じようにcp932への変換をしているので、) ¥x{...} への変換はされなくなった。use Encode qw/ from_to /;
@data = <STDIN>;
foreach $ele (@data) {
from_to( $ele, 'utf8','cp932');
}
print @data;


文字連結などはしない。
例:
foreach $ele (@url) {
foreach $ele_inner (@inner) {
if ($ele =~ /^$ele_inner/) {
# ↑バカみたいにそのまま書く
push (@out, $ele );
last;
}
}
}


Googleアドセンスがページ内に貼ってある簡単なPERLのプログラム.. - 人力検索はてな
ローカルサーバでテストしてみたところ、英語は通りましたが、日本語だと、Undefined subroutine &jcode::f called at jcode.pl line 400
のようになりました。
調べてみると、
&jcode’convert(*value, ’EUC-JP’); #’;
の部分が正しくないように思います。
メタタグなどではEUC-JPでしょうし、PHPのmb_convert_encodingなどでもEUC-JPを引数に使えるでしょうが、これはjcode.plですので、jcode.plにあった引数の形でないと動きませんよね。単なるコピー&ペーストミスの可能性も高いとも思いますが・・・。
&jcode’convert(*value, ’euc’); #’;
にして、再度テストしました。エラーログは出なくなりました。

