WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:半角コードを全角に変換する。

はるか [WriteDate : Thu May 24 02:01:11 2001]

大変お世話になっています。またまたPerlの質問です(^^;)
よくありそうですが、検索で調べたら無さそうだったので質問させて下さい。

Perlで半角の文字(例えばA-Z)を全角(A-Z)に変換したいのですが、どうしたらいいのでしょう?

私が調べた結果、
A(\x41)-Z(\x5A) → A(8260)-Z(8279)
だということと、なんとなく、
$string =~ s/[\x41-\x5A]/〜〜〜/eg;
を使いそうなことは分かったのですが...

例えばA-Zの場合で教えて下さい。
よろしくお願いします!!

※ちなみに全角コードはS-JISです。変換したい時はEUCの方が楽でしょうか?


D.D. [URL] [WriteDate : Thu May 24 08:20:45 2001]

use Jcode;
$j = Jcode->new($string);
$j->Jcode::tr('A-Z', 'A-Z');

or

require "jcode.pl";
&jcode::tr(\$string, 'A-Z', 'A-Z');


> ※ちなみに全角コードはS-JISです。変換したい時はEUCの方が楽でしょうか?
EUC-JP の方が楽なんじゃないでしょうか。


はるか [WriteDate : Thu May 24 22:55:05 2001]

D.D.さん、いつもありがとうございますm(__)m

ええと、それでやってみてうまくいったのですが、
できればもう少しスマートな方法を挑戦してみたいのです。

コードの数字を計算して
$string =~ s/???/!!!/eg;
なんかを使ってうまく変換できないでしょうか?


Nobu3 [URL] [WriteDate : Fri May 25 09:23:04 2001]

>できればもう少しスマートな方法を挑戦してみたいのです。
挑戦するのは誰ですか?

あまり「スマート」ではないですが。
s/([A-Z])/pack("H*", sprintf("%4x" ,ord($1)+33311))/eg;


Nobu3 [URL] [WriteDate : Fri May 25 09:40:05 2001]

ちなみに、SJISだけです。しかも、「a」と「a」の差は「33312」なのでこれだけでは「a-z」に対応できません。

EUCやJISにも対応しようとすれば、結局スマートには行かないし、どちらにしてもjcodeなりJcodeを使うのであれば、わざわざ自前で変換するのは労力(とコード)の無駄かと。


D.D. [URL] [WriteDate : Fri May 25 10:04:30 2001]

私見ですが、既存のモジュールとか既存のライブラリが利用できるなら利用した法がスマートな気も。


> コードの数字を計算して
> $string =~ s/???/!!!/eg;
> なんかを使ってうまく変換できないでしょうか?
気合いがあればできそうな気もしますが、僕は気合いが不足気味なので…。


ふじ [URL] [WriteDate : Fri May 25 14:29:51 2001]

$_ = 'abcdABCD';
$_ =~ s/([A-Za-z])/pack("C*", 0xA3, ord($1)+0x80)/eg;
print $_;

いまいち美しくないけど。

> 既存のモジュールとか既存のライブラリが利用できるなら利用した法がスマートな気も。
同感です。車輪の際発明はしないってことで。
# でも、車輪の仕組みを知ろうとするのはいいことですね。
# Jcode.pm のソースを読むとか。


ふじ [URL] [WriteDate : Fri May 25 14:30:50 2001]

あ、上記の例は EUC-JP でした。


はるか [WriteDate : Fri May 25 23:15:36 2001]

なるほど!!皆さん、凄いですね。
色々試して勉強してみます!!
ありがとうございました!!!


はるか [WriteDate : Fri May 25 23:16:27 2001]

完了です。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]
ChaichanPAPA's World