Jcode.pmを使用して半角カナから全角カナに変換したいのです。
こちらの過去ログを拝見し、以下のようなロジックを記述したのですが、
”Undefined subroutine &Jcode::h2z_euc called at test_jcode.pl line 7.”というエラーが出てしまいます。


use Jcode;
$line = 'アイウエオ';
$ato = &Jcode::h2z_euc(\$line);
print $ato, "\n";

どなたかご回答よろしくお願いいたします。

このQ&Aに関連する最新のQ&A

A 回答 (8件)

$line に入っている文字コードの判別に失敗しているのかもしれません。


Jcode->new($line,'euc')->h2z->sjis;
のように指定すると上手くいきませんか?

sjis にする必要が無い場合は
Jcode->new($line,'euc')->h2z;
でいいはずです。
    • good
    • 0
この回答へのお礼

(1)"アイウエオ"
(2)"ア\nイ\nウ\nエオ"
(3)"アイウエオ"

(2)や(3)だと半角から全角へ変換されるのですが,
(1)だとうまくいきません。

先輩に聞いたところ,Oracleで同じような事をしてくれる関数があるようなので、そちらを試してみることにします。
多数の回答ありがとうございました。

お礼日時:2002/01/30 15:28

> 全角から半角への変換はうまくいったのですが、


これは、Jcode->new($line)->z2h->euc; としたと言うことですか?
z2h を使わないと全角から半角へは変換しないはずですが。

> 半角から全角への変換がうまくいきません。
$line に半角カナが入っているんですよね?
Jcode->new($line)->h2z->euc;
私が試した限りではこれで上手く行くんですけど。

> 原因として、半角カナがeucである事だと考えられるのです。
> そこで、euc から sjis へ変更しようとしたのですが,うまくいきません。
sjis に変換するには、
Jcode->new($line)->sjis; です。
半角->全角変換も同時にする場合は
Jcode->new($line)->h2z->sjis; です。

この回答への補足

>これは、Jcode->new($line)->z2h->euc; としたと言うことですか?

そうです。すみません。説明不足で…

Jcode->new($line)->sjis;

上記を試してみましたが,sjisへ変換できないのです。

変換さえできればうまくいくと思うのですが…

補足日時:2002/01/28 09:20
    • good
    • 0

use Jcode;


$line = "アイウエオ";
$s = Jcode->new($line)->h2z->euc;
print $s,"\n";

で上手くいきませんか?

この回答への補足

全角から半角への変換はうまくいったのですが、
半角から全角への変換がうまくいきません。

原因として、半角カナがeucである事だと考えられるのです。
そこで、euc から sjis へ変更しようとしたのですが,うまくいきません。

何が問題なのでしょうか。

補足日時:2002/01/25 20:47
    • good
    • 0

そういえば、私も &Jcode::h2z がうまく使えなかった記憶があります。


で、結局以下のようにしました。

use Jcode::H2Z;
$line = 'アイウエオ';
&Jcode::H2Z::h2z(\$line);
print $line, "\n";

Jcode モジュールをインストールしたのなら、Jcode::H2Z はインストール
されているはずなので、これでできるのではないかと。
Jcode.pm を読むと、Jcode::h2z って Jcode::H2Z::h2z を呼び出していた
だけだったので。

この回答への補足

試してみましたが,出来ませんでした。

$lineに全角カナをいれると全角カナのまま
半角カナをいれると半角カナのまま出力されてしまいます。

Jcode::convertを使用して現在の文字コードを出力させたところ、うまく出ましたので,Jcodeモジュール自体は正しくインストールされているはずなのですが。。。

補足日時:2002/01/25 12:01
    • good
    • 0

Jcode.pm には h2z_euc は無いみたいですが、



use Jcode;
$s = Jcode->new($s)->h2z->euc;

で出来ませんか。

この回答への補足

試してみたのですが,変換したい文字列をどこに記述すればよいのかわかりません。
教えてください。

補足日時:2002/01/25 09:30
    • good
    • 0

$ato = &Jcode::h2z_euc(\$line);


の部分を
$ato = &Jcode::h2z(\$line);
に変更してもダメでしょうか.

この回答への補足

$ato = &Jcode::h2z(\$line);
$ato = &{$Jcode::h2z{'euc'}}(\$line)

上記のように、インターネットなどで記載されている使用方法は全てやってみたのですが,うまくいかないのです。
やはりjcode.plでないとだめなのでしょうか。

補足日時:2002/01/22 15:34
    • good
    • 0

Jcode.pmは使ったことがありませんでした。


Perlのバージョン等は大丈夫なのですよね?

参考URL:http://openlab.ring.gr.jp/Jcode/index-j.html

この回答への補足

バージョンは、5.6.630(最新)です。

Jcode.pmに移行するには以下の2点を変更するだけで、ほぼいけるという記述をインターネットで見つけたのですが,できません。

(1)require jcode.pl → use Jcode;
(2)jcode:: → Jcode::

Jcode.pmでは出来ないということであれば、jcode.plを使用使用とは思っているのですが。。。

補足日時:2002/01/17 15:03
    • good
    • 0

jcode.plというライブラリを使用するのですよね?


ならば

require "jcode.pl";
$line = "アイウエオ";
&jcode'h2z_euc(*$line);
print "$line\n";

でイケると思うのですが。。

この回答への補足

jcode.plではなく、jcode.plの後継モジュールJcode.pmでは出来ないのですか。

出来ないのであればjcode.plでやります。。。

補足日時:2002/01/17 13:57
    • good
    • 0

このQ&Aに関連する人気のQ&A

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Q$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );がよく

$wfurikae = 1 if ( &ccom::getShukujitsu( &com::tD( $wwy,$wwm,$wwd )) ne '' );

というスクリプトがあったのですが、

$wfurikae = 1 の後に;もいれずifがきています。

違和感があります。

どのような意味になるのでしょうか。

宜しくお願い致します。

Aベストアンサー

そのまんまだと思いますよ。
if 以下の条件が真の時 $wfurikae = 1となります。
Perlはいろいろな書き方ができますので、こういう書き方もありです。
英語の文法の並びにする書き方です。

QPrel正規表現で'$1$'.$saltのあたりが理解できない。

小生Perlを勉強中です。
Perl Codeに以下のようなパスワード暗号処理のサブルーチンが
ありましたが、読めません。教えて下さい。

sub encrypt{
local($inpw)=$_[0];
local(@SALT,$salt,$encrypt);

@SALT=('a'..'z','A'..'Z','0'..'9','.','\');
srand;
$salt=$SALT[int(rand(@SALT)).$SALT[int(rand(@SALT))];
$encrypt=crypt($inpw,$salt)||crypt($inpw,'$1$'.$salt);
return $encrypt;
}

とあります。
特に、下から3行目の($inpw,'$1$'.$salt)が
理解できません。
解説していただければ幸いです。

Aベストアンサー

過去に同様の質問がありました。ctpsysさんの疑問にすべて答えられるかどうかわかりませんが、すくなくとも
>下から3行目の($inpw,'$1$'.$salt)が理解できません
というご質問に対しては参考になるかと思います。

参考URL:http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,http://oshiete1.goo.ne.jp/kotaeru.php3?q=74593,

QJcode.pmでの半角カナ→全角カナ変換

Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。

use Jcode;
$euc_string = jcode($form_input)->h2z->euc;

原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。

use Jcode;
$euc_string = jcode($form_input,"sjis")->h2z->euc;

ただ、入力コードがシフトJISとは限りませんので、この記述は好ましくないと思っています。

半角カナの文字化けは、webフォームを作られた方なら皆さん経験されていると思うのですが、どうされているのでしょうか?
Jcode.pmの文字コード判別は、半角カナが混じっていた場合、かなり長い文字列でないと判別に失敗するようなので、フォームで短い文字列(名前等)を入力させて処理させた場合、ほとんど上手く動かないようなのですが?

Webフォームから取得したデータに半角カナが含まれていた場合の文字化け対策として、Jcode.pmを使用して、下記のようにEUCに変換しています。

use Jcode;
$euc_string = jcode($form_input)->h2z->euc;

原理的には間違ってはいない筈ですが、ほとんどの場合、$form_inputの文字コードの判別に失敗(恐らく半角カナをEUCと誤認)し、文字化けしてしまいます。誤認しないように、下記の様に記述すれば、正しく全角カナに変換してくれます。

use Jcode;
$euc_string = jcode($form_input,"sjis")->h2z->eu...続きを読む

Aベストアンサー

私は、bkoさんのあげられているような、入力文字列を"SJIS"と決めうちする方法を取っています。ほとんどのブラウザでは、SJISでフォームを出力した場合にはSJISで日本語をエスケープして送信してくるからです。実際、SJISのフォームに対してeucで送信してくるブラウザは、最近のブラウザでは見たことがありません。
(昔は平気でeucで返してきましたけど:-))

sjisの半角カナはeucとかぶる領域に存在しますので、これを識別するには日本語として正しいのか、までを意識する必要があり、めんどうな実装となると思います。

Q「$" = ',';」という構文の意味は?

Perl スクリプト中に「$" = ',';」という構文が出てきたのですが、これはどういう意味ですか?

Aベストアンサー

"(ダブルクオート)内ではリスト値(@foo)も展開されますが、そのリスト値の区切り文字を定義する特殊変数で、デフォルトはスペースだそうです。

参考URL:http://www.tohoho-web.com/wwwperl1.htm#Tokushu

Q@×× = $q->param('**'); の書き出しについて

このようなチェックボックスを作って
<INPUT type="checkbox" name="q1" value="A">A<br>
<INPUT type="checkbox" name="q1" value="B">B<br>
<INPUT type="checkbox" name="q1" value="C">C<br>

このようなPerlの記述をして
use CGI;
$q = new CGI;
@q1 = $q->param('q1');

このようなCGIの値の書き出し部分はどうしたらいいですか?
print "<td width=300><font size=2>●●{'q2'}</font></td>\n";

上記の
@q1 = $q->param('q1');
に、チェックされた値が格納されているんですよね。
その値を表示させたいと思っています。
いろいろ教えてもらって、ここまでたどり着きました。

Aベストアンサー

#3さんの『お礼』にあるコードですが、間違っているところだけ書いておきます。

原因はCGI.pmと独自の入力処理が、それぞれデータをとり合っていることです。このコード上では、独自の入力処理の部分がSTDINを読み込んでしまうので、CGI.pmからは何も読む事は出来ません。

入力処理には、CGI.pmか独自入力処理の『いずれか』を用いてください。全て書いても使えるのは一つだけです。質問内容から考えられるお勧めは、CGI.pmを利用する事です。(オーバースペックですが、ひとまずそう言うことは考えない方針で。)

コードを見る限り、恐らく『データでコード処理』の部分を全て削除すれば大丈夫だと思います。


おすすめ情報