「半角カナを全角カナに変換」の版間の差分
ナビゲーションに移動
検索に移動
imported>Webmaster |
imported>Webmaster |
||
37行目: | 37行目: | ||
== 文字コードを意識的にプログラムする == | == 文字コードを意識的にプログラムする == | ||
入り口で decode して、内部ではすべて flagged utf8 で扱い、出口で encode する。これがすべてです!とにかくこの基本方針をまもっていれば幸せになれます。 | 入り口で decode して、内部ではすべて flagged utf8 で扱い、出口で encode する。これがすべてです!とにかくこの基本方針をまもっていれば幸せになれます。 | ||
+ | という言いつけを守るために、<code>binmode </code>を使わないで意識的に文字コードを考えたら私的には以下のようにするのが良いと感じました。<br /> | ||
+ | <syntaxhighlight lang="perl"> | ||
+ | use strict; | ||
+ | use warnings; | ||
+ | use utf8; | ||
+ | |||
+ | { | ||
+ | use Encode; | ||
+ | use Encode::JP::H2Z; | ||
+ | my $eucjp = Encode::find_encoding('eucjp'); | ||
+ | sub hankaku2zenkaku { | ||
+ | my $str = $eucjp->encode(shift); | ||
+ | Encode::JP::H2Z::h2z(\$str); | ||
+ | $eucjp->decode($str); | ||
+ | } | ||
+ | sub zenkaku2hankaku { | ||
+ | my $str = $eucjp->encode(shift); | ||
+ | Encode::JP::H2Z::z2h(\$str); | ||
+ | $eucjp->decode($str); | ||
+ | } | ||
+ | } | ||
+ | |||
+ | print encode('cp932',hankaku2zenkaku("オンドゥルルラギッタンディスカー!?")), "\n"; | ||
+ | print encode('cp932',zenkaku2hankaku("ウソダドンドコドーン")), "\n"; | ||
+ | |||
+ | </syntaxhighlight> | ||
<!-- カテゴリに追加するページ名を記入 --> | <!-- カテゴリに追加するページ名を記入 --> | ||
[[Category:Perl|はんかくかなをぜんかくかなにへんかん]] | [[Category:Perl|はんかくかなをぜんかくかなにへんかん]] |
2016年1月1日 (金) 14:43時点における版
windows7において半角カナから全角カナへの変換方法についていろいろ調べてみて、自分にとって使いやすいプログラムを見つけたので備忘的に残しておきます
【修正ポイント】
- Windoes端末からの操作のためbinmode STDOUTをcp932へ変更
参考:404 Blog Not Found
参考:404 Blog Not Found
use strict;
use warnings;
use utf8;
#これで標準出力が自動的にcp932にencodeされる
binmode STDOUT , ":encoding(cp932)";
{
use Encode;
use Encode::JP::H2Z;
my $eucjp = Encode::find_encoding('eucjp');
sub hankaku2zenkaku {
my $str = $eucjp->encode(shift);
Encode::JP::H2Z::h2z(\$str);
$eucjp->decode($str);
}
sub zenkaku2hankaku {
my $str = $eucjp->encode(shift);
Encode::JP::H2Z::z2h(\$str);
$eucjp->decode($str);
}
}
print hankaku2zenkaku("オンドゥルルラギッタンディスカー!?"), "\n";
print zenkaku2hankaku("ウソダドンドコドーン"), "\n";
文字コードを意識的にプログラムする
入り口で decode して、内部ではすべて flagged utf8 で扱い、出口で encode する。これがすべてです!とにかくこの基本方針をまもっていれば幸せになれます。
という言いつけを守るために、binmode
を使わないで意識的に文字コードを考えたら私的には以下のようにするのが良いと感じました。
use strict;
use warnings;
use utf8;
{
use Encode;
use Encode::JP::H2Z;
my $eucjp = Encode::find_encoding('eucjp');
sub hankaku2zenkaku {
my $str = $eucjp->encode(shift);
Encode::JP::H2Z::h2z(\$str);
$eucjp->decode($str);
}
sub zenkaku2hankaku {
my $str = $eucjp->encode(shift);
Encode::JP::H2Z::z2h(\$str);
$eucjp->decode($str);
}
}
print encode('cp932',hankaku2zenkaku("オンドゥルルラギッタンディスカー!?")), "\n";
print encode('cp932',zenkaku2hankaku("ウソダドンドコドーン")), "\n";