XML::RSS と Encode の組み合わせで以下のエラーが発生。
Cannot decode string with wide characters
最初に目にした記事がこちら。
Encode.pm ではまった
なるほど。(って実は良く分かってない...)
次に見つけたのがこちら。
perl//Encode
Q&A にこんなやり取りがありました。
質問: >Wide character in subroutine entry at /path/to/perl/lib/Encode.pm line 154.
と言われて死にます。 Encode の bug ですか?
いえ、おそらく仕様です。
このエラーが出て死ぬ原因は、 decode の入力文字列が utf8 (Wide character) 形式になっている、つまり U+0100 以上の文字が含まれていることにあります。
Encode::decode は実際には Encode::find_encoding ($encoding)->decode ($string) をしていますが、この後半の decode が carp しているので、エラー出力には Encode モジュール内で死んだと出るのです。
で、結局ソリューションは??と聞きたくなるのですが、ようは UTF-8 のフラグが立ちまくっているので、その状態ではEncodeできませんよということだ。
つまり UTF-8 のフラグを降ろせば先程のエラーは出なくなるはず。
UTF-8 フラグについては延々と書かれているのですが、とりあえずフラグに関するメソッドを探してみるとありました。
_utf8_off(STRING)
これで UTF-8 フラグを降ろしてあげたら見事に Encode に成功です。
この他にも UTF-8 関連のメソッドは、
is_utf8(STRING[,CHECK])
_utf8_on(STRING)
の2つがあるようです。
メソッド名からその内容は想像できますよね。
スキンケア クチコミ
シアリス 副作用