utf8 ファイルを open したけど文字化けするケース
2008-06-07-2
[Programming]
open の引数は「FILEHANDLE」「MODE」「ファイル名など」、に分けて渡すのがセキュリティ上良いらしいのだが、面倒なこともある。
例えば、perl 5.8.5 と 5.8.6 で試したんだけど、下記のスクリプトを実行すると「A」だけ文字化けする。
みんなどうやってるんだろう。
いちいち "<:utf8" とかやりたくないし。
たぶん私が何か使い方を間違っているんだと思う。
「use open ':utf8'」の意味を勘違いしているのかも。
ということで、あまりに基礎的なことでアレですが、こういう場合どうしたら良いかご存知の方、教えてください!
ファイルにせよ、STDIN にせよ、ともかくどんなルートで来ようとも入力された UTF-8 文字列が、何も気にせずとも内部コードになっていれば嬉しいのです。
なんか最近、大抵のタスクではまるのはこのあたりなので疲れ気味。
追記: はてブのコメントで 5.8.8 では問題ないとの情報を頂きました。
ありがとうございます。さくらの500円レンタルサーバが 5.8.8 なので確認してみたところ、確かに文字化けしませんでした!
5.8.8 (or 5.10) の普及待ちですかね…。
例えば、perl 5.8.5 と 5.8.6 で試したんだけど、下記のスクリプトを実行すると「A」だけ文字化けする。
みんなどうやってるんだろう。
いちいち "<:utf8" とかやりたくないし。
たぶん私が何か使い方を間違っているんだと思う。
「use open ':utf8'」の意味を勘違いしているのかも。
#!/usr/bin/perl use strict; use warnings; use Encode; use utf8; use open ':utf8'; binmode STDIN, ":utf8"; binmode STDOUT, ":utf8"; my $fn = shift @ARGV; my $fh; # A open $fh, "<", $fn or die $!; print while <$fh>; close $fh; # B open $fh, "<:utf8", $fn or die $!; print while <$fh>; close $fh; # C open $fh, $fn or die $!; print while <$fh>; close $fh; # D open $fh, "< $fn" or die $!; print while <$fh>; close $fh;
ということで、あまりに基礎的なことでアレですが、こういう場合どうしたら良いかご存知の方、教えてください!
ファイルにせよ、STDIN にせよ、ともかくどんなルートで来ようとも入力された UTF-8 文字列が、何も気にせずとも内部コードになっていれば嬉しいのです。
なんか最近、大抵のタスクではまるのはこのあたりなので疲れ気味。
追記: はてブのコメントで 5.8.8 では問題ないとの情報を頂きました。
ありがとうございます。さくらの500円レンタルサーバが 5.8.8 なので確認してみたところ、確かに文字化けしませんでした!
5.8.8 (or 5.10) の普及待ちですかね…。
この記事に言及しているこのブログ内の記事