半角カナを全角カナに変換
2016年8月13日 (土) 11:16時点におけるimported>Webmasterによる版
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";
文字も記号も数字も全て半角を全角にする
いろいろ使って見て分かったことですけど、半角を全角にする場合にはモジュールという便利な物を使う必要がある
モジュールには標準モジュールのEncode.pm
と別途インストールして使用するUnicode::Japanese
およびLingua::JA::Regular::Unicode
がある。
ここでやりたいこととと異なってきた内容で、標準モジュールのEncode.pm
要するに今まで説明した
Encode::JP::H2Z::z2h(\$str);
といった、Encode::JP::H2Z::z2h
では全角変換はカナのみで、数字や記号については変換しない事が分かりました。
これを回避するために新たにuse Unicode::Japanese;
を使うと数字や記号も変換しますUnicode::Japanese;
を使う場合にはUnicode::Japanese
をインストールしなければなりません。
Unicode::Japaneseインストール方法
$ perl -MCPAN -e shell
cpan> install Unicode::Japanese
インストール環境に問題が無ければこれでモジュールがインストールされます。