- ベストアンサー
HTML表示で数字を半角・全角にする方法
- HTML表示で数字を半角・全角にする方法について教えてください。
- 表示したい数字が1桁なら半角、2桁以上は全角にしたいと思っていますが、もっとスマートな記述方法はありますか?
- 現在はif文を使って1桁と2桁以上で判定していますが、他の方法があれば教えてください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
> 「use utf8;」で、スクリプト内で扱う文字コードを > UTF8にする事で可能になるという理解でよろしいでしょうか? ちょっと違う。 use utf8はスクリプト自体をUTF-8で記載することを宣言する物。 だからスクリプトはちゃんとUTF-8で保存してください。 これによって、perlは「スクリプト内」の文字列を正しく文字列として扱えます。 これでケアできるのは「スクリプト内」の文字列なので、 「スクリプト外」(STDINとかコマンドライン引数、ファイル)からやってきた文字列として扱うつもりのデータは decodeしてperlが文字列として扱えるように変換しなければなりません。 (例えそのデータがUTF-8文字列であってもです、decodeを省略できるのはASCIIやLatin-1だけ。) 逆に、「スクリプト外」(STDOUTやファイル)に文字列を出す場合は、 所望の文字コードにencodeする必要があります。 ただし、PerlIOレイヤを使えばこの処理は若干省略可能です。 binmode STDOUT, ":utf8"; はSTDOUTに出力するときのencodeを省略する為の物です。 これがないと、printのたびに print encode( 'utf8', $no ); とかする必要があります。 use utf8で検索すれば上の方にこんなページが引っかかります。 http://www.rwds.net/kuroita/program/Perl_unicode.html http://hikoboshi.org/perl/utf8.html http://blog.livedoor.jp/dankogai/archives/51224106.html
その他の回答 (2)
- kmee
- ベストアンサー率55% (1857/3366)
素の状態では、「全角文字」は「2つの文字(Shift_JISの場合)」として処理されます。 よって tr/0-9/0-9/は tr/0-9/AB-CD/を書くようなものです。(ここでは、A:0の1バイト目、B:0の2バイト目..とします) 一文字として処理しなければならない「全角文字」がバラバラに処理されてしまうわけです。 use utf8 ; には、スクリプトがutf8で掛れていることを示すと同時に、utf8の「複数バイト文字」を「一文字」として処理するようになります。 これでtr/0-9/0-9/が 0と「全角の0」が1文字ずつ対応できるようになります。
お礼
ご回答ありがとうございました。 文字コードについて、再度、勉強しなおそうと思います。 詳しい解説ありがとうございました。
- Gotthold
- ベストアンサー率47% (396/832)
> 数字を1桁なら半角、2桁以上は全角にしたいと思っています。 コードは逆だったのでコードの方を信用しました。 use utf8; #UTF-8で記載 use strict; use warnings; binmode STDOUT, ":utf8"; #環境に合わせる #binmode STDOUT, ":encoding(euc-jp)"; #binmode STDOUT, ":encoding(cp932)"; my $no = 1; if( 0 <= $no && $no <= 9 ){ $no =~ tr/0-9/0-9/; } print "$no\n";
お礼
迅速な回答ありがとうございました。 > コードは逆だったのでコードの方を信用しました。 失礼しました。 コピーペーストで貼り付けたら、表示が半角と全角が逆になってしまいました。 以前「$no =~ tr/0-9/0-9/」は考えたのですが 上手く動作しませんでした。 「use utf8;」で、スクリプト内で扱う文字コードを UTF8にする事で可能になるという理解でよろしいでしょうか?
お礼
ご回答ありがとうございました。 いただいたソースを私なりに調べたのですが、詰めが甘かったです。 最近は、スクリプトをUTF-8で作成しています。 「use utf8」で、スクリプト内の文字列がそのまま使えるわけですね エンコード・デコードに関しても勉強になりました。 挙げていただいたサイトも再読いたします。 詳しく解説いただきありがとうございました。