[Perl]



Wide character in print atというエラーはUTF-8フラグが付いた文字列をprintしようとしているからである。なのでUTF-8フラグを取り外してからprintすればエラーがでなくなります。UTF-8フラグが付いているかどうかはutf8::is_utf8を使用すればよい。


#UTF8フラグが付いているかの確認

print utf8::is_utf8($string) ? 'flagged' : 'no flag';


utf8::is_utf8では実際の文字列がUTF-8かどうかではなく、あくまでフラグがついているかどうかを確認します。そのため、UTF-8の文字列もフラグが付いていなければ上記の出力はno flagとなります。またutf8::is_utf8はuseしなくても使用できる。useすると全然違う意味あいになるので注意。


UTF-8フラグが付いていたら、encodeを使用してフラグをはずします。以下の例では$stringをutf-8に変換して出力します。

print encode('utf-8', $string);


またPerlIO layerを使用する方法もあります。その他にも-Cコマンドラインスイッチを入れれば自動判別をするらしいです。

binmode(STDOUT, ":utf8");


[関連記事]
Encode::Guess - 文字コードの判別


[参考]
Perl 5.8.x Unicode関連



広告
新版Perl言語プログラミングレッスン入門編 新版Perl言語プログラミングレッスン入門編
¥ 2,835 / 売り上げランク: 9110 / 512 ページ

非常に分かりやすい。
今までにも様々な参考書に目を通してきていたが、その中でもこの本かなり読みやすく、丁寧に書かれていた。
初心者には特にお勧め。
初心者以外の方でも軽く目を通す価値はあると思う。

Code Reading―オープンソースから学ぶソフトウェア開発技法 Code Reading―オープンソースから学ぶソフトウェア開発技法
¥ 5,460 / 売り上げランク: 9887 / 523 ページ

CodeCompleteとCodeReadingを併せて読むとよいと、
組込み系のSESSAMEプロジェクトのメーリングリストと、
OS系のTOPPERSプロジェクトのメーリングリストで推薦を受けました。

CodeCompleteは読んだことがあったので、CodeReadingを読んでいます。

オープンソースを仕事にしているので、たいへん役立っています。

MISRA-Cは研修で取り上げてきたので、本書も研修の資料としても取り上げるように準備中です。

初めてのPerl 初めてのPerl
¥ 3,780 / 売り上げランク: 11741 / 379 ページ

いわゆるリャマ本として知られる定番書

初めてのとあるが初心者向きではないと思う。
よくできてはいるが、、。