「半角カナを全角カナに変換」の版間の差分

提供: dococo wiki
ナビゲーションに移動 検索に移動
imported>Webmaster
imported>Webmaster
67行目: 67行目:
  
 
</syntaxhighlight>
 
</syntaxhighlight>
 +
 +
== 文字も記号も数字も全て半角を全角にする ==
 +
いろいろ使って見て分かったことですけど、半角を全角にする場合にはモジュールという便利な物を使う必要がある<br />
 +
モジュールには標準モジュールの<code>Encode.pm</code>と別途インストールして使用する<code>Unicode::Japanese</code>および<code>Lingua::JA::Regular::Unicode</code>がある。<br />
 +
ここでやりたいこととと異なってきた内容で、標準モジュールの<code>Encode.pm</code>要するに今まで説明した<br />
 +
<syntaxhighlight lang="perl">
 +
      Encode::JP::H2Z::z2h(\$str);
 +
</syntaxhighlight>
 +
といった、<code>Encode::JP::H2Z::z2h</code>では全角変換は<span style="color:red">'''カナのみで、数字や記号については変換しない'''</span>事が分かりました
  
 
<!-- カテゴリに追加するページ名を記入 -->
 
<!-- カテゴリに追加するページ名を記入 -->
 
[[Category:Perl|はんかくかなをぜんかくかなにへんかん]]
 
[[Category:Perl|はんかくかなをぜんかくかなにへんかん]]

2016年8月13日 (土) 11:10時点における版

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では全角変換はカナのみで、数字や記号については変換しない事が分かりました