無窮 i ラボ Blog

知的ネット社会、知そのもの、機械との共生、プログラミングに関して。

 
 


UTF-8 で書かれたファイル hogehoge.txt から、バッチファイル(.bat)に書かれた以下のコマンドで jcode.pl を使い、内容を Shift JIS にエンコードしファイル hogehoge_sjis.txt を作成する処理を実施していたところ、変換できない文字が ¥x{...} に変換された。

perl -Mencoding=utf-8,STDOUT,shiftjis -pe1 < hogehoge.txt > hogehoge_sjis.txt

そして、他のプログラムによる処理を経て、Javascriptのファイルに ¥x{...} が書き込まれてしまい、¥マークによるエスケープが原因なのか、Javascriptが走らないという事象が発生した。

後で分かったことだが、

perl -Mencoding=utf-8,STDOUT,cp932 -pe1 < hogehoge.txt > hogehoge_sjis.txt

とするだけで、¥x{...} への変換はされなくなった。なお、cp932 は、Shift JIS と(ほぼ)同じである。

しかし、今回はレガシーな jcode.pl ではなく、現在のスタンダードらしい Encode.pm を使った処理に変更した。

バッチファイル

perl encode_utf8_to_cp932.pl < hogehoge.txt >hogehoge_sjis.txt

encode_utf8_to_cp932.pl

use Encode qw/ from_to /;

@data = <STDIN>;

foreach $ele (@data) {
from_to( $ele, 'utf8','cp932');
}

print @data;

(前述の処理と同じようにcp932への変換をしているので、) ¥x{...} への変換はされなくなった。
スポンサーサイト
 このエントリーをはてなブックマークする このエントリーを含むはてなブックマーク