Perlのdecode

            <div class="section">

Perlのdecodeを使って [utf-8] → [euc-jp] に変換するときに変なエラーが起こったので、その対策をメモ。

use Encode;
##なんかもろもろ書いてあるとして
my $data = 'ハローワールド' #utf-8の文字列
$data = decode('utf-8', $data);
$data = encode('euc-jp', $data);

これを実行したところ、以下のエラーが出た。

Cannot decode string with wide characters #この後ろにEncode.pmのエラー行がでる

調べたところ、UTF-8フラグが立っているとこのエラーがでてしまうらしい。

これを回避するために、decodeを呼び出す前にUTF-8フラグをおろせばいいようです。

Encode::_utf8_off($data);
$data = decode('utf-8', $data);
$data = encode('euc-jp', $data);

これで成功する。

_utf8_offでUTF-8フラグをおろすことができるみたい。

参考

http://d.hatena.ne.jp/libkazz/20070605/1181026439