Perlで「Wide character in print」というエラーになる場合の対処
Perlで「Wide character in print」というエラーになる場合の対処方法について紹介します。
1.問題点
次のような文字コードがUTF-8で書かれたPerlスクリプト(test.pl)があります。
#!/usr/bin/perl
use Encode;
my $str = "てすと";
print decode( 'utf-8', $str );
このスクリプトを、Windows(Shift_JIS)上で
C:\perl test.pl
と実行すると次のエラーが発生し、出力が文字化けします。
Wide character in print at test.pl line 4.
縺ヲ縺吶→
2.原因
原因は、「UTF-8フラグ」がついた文字列を出力しているためです。
UTF-8フラグの説明については別途エントリーしますが、簡単に言うと外部から入力された文字列を内部文字列に変換したあとに付与されるフラグです。
サンプルの場合、Encode::decodeでUTF-8フラグが付与されてしまいます。
3.対処方法
サンプルコードの場合、UTF-8の文字列をWindows上で表示したいということであれば、次のようにEncode::from_toを利用すればOKです。
#!/usr/bin/perl
use Encode;
my $str = "てすと";
Encode::from_to( $str, 'utf-8', 'sjis' );
print $str;
あるいは、Encode::encodeでUTF-8フラグを除去します。
#!/usr/bin/perl
use Encode;
my $str = "てすと";
my $tmp = decode( 'utf-8', $str );
print encode( 'sjis', $tmp );
Posted by yujiro このページの先頭に戻る
- Perlでansibleライブラリを作成する方法
- perlのCPANモジュールからRPMを作成する方法
- Perlで「Subroutine permission redefined at~」を抑止する方法
- XML::Simpleのインストールでエラーになる場合の対処
- YAML::Tinyで「YAML::Tiny found bad indenting in line~」というエラーになる場合の対処
- Perlの正規表現を使って文字列をまとめて取得する方法
- Perlのハッシュでキーの有無を調べる方法
- perlで配列の途中の要素を削除する方法
- YAML::Tinyでコロンを利用する方法
- Perlで改行コードがCRのファイルを読み込む方法
- Perlで「Possible precedence issue with control flow operator」という警告の対処
- PerlのLWPで「Can't verify SSL peers without knowing which Certificate Authorities to trust」というエラーになったときの対処
- Perl+Windowsでファイルを再帰的にリネームする方法
- Perlプログラムの中でファイルの一部を書き換える方法
- Perlの「Bareword "%s" not allowed while "strict subs" in use~」というエラーについて
トラックバックURL
コメントする
greeting