- ベストアンサー
半角カナから全角カナに変換
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"; どなたかご回答よろしくお願いいたします。
- みんなの回答 (8)
- 専門家の回答
質問者が選んだベストアンサー
$line に入っている文字コードの判別に失敗しているのかもしれません。 Jcode->new($line,'euc')->h2z->sjis; のように指定すると上手くいきませんか? sjis にする必要が無い場合は Jcode->new($line,'euc')->h2z; でいいはずです。
その他の回答 (7)
- alicia-y
- ベストアンサー率40% (85/208)
> 全角から半角への変換はうまくいったのですが、 これは、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へ変換できないのです。 変換さえできればうまくいくと思うのですが…
- alicia-y
- ベストアンサー率40% (85/208)
use Jcode; $line = "アイウエオ"; $s = Jcode->new($line)->h2z->euc; print $s,"\n"; で上手くいきませんか?
補足
全角から半角への変換はうまくいったのですが、 半角から全角への変換がうまくいきません。 原因として、半角カナがeucである事だと考えられるのです。 そこで、euc から sjis へ変更しようとしたのですが,うまくいきません。 何が問題なのでしょうか。
- 2nd
- ベストアンサー率30% (19/63)
そういえば、私も &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モジュール自体は正しくインストールされているはずなのですが。。。
- alicia-y
- ベストアンサー率40% (85/208)
Jcode.pm には h2z_euc は無いみたいですが、 use Jcode; $s = Jcode->new($s)->h2z->euc; で出来ませんか。
補足
試してみたのですが,変換したい文字列をどこに記述すればよいのかわかりません。 教えてください。
- slackware
- ベストアンサー率59% (22/37)
$ato = &Jcode::h2z_euc(\$line); の部分を $ato = &Jcode::h2z(\$line); に変更してもダメでしょうか.
補足
$ato = &Jcode::h2z(\$line); $ato = &{$Jcode::h2z{'euc'}}(\$line) 上記のように、インターネットなどで記載されている使用方法は全てやってみたのですが,うまくいかないのです。 やはりjcode.plでないとだめなのでしょうか。
Jcode.pmは使ったことがありませんでした。 Perlのバージョン等は大丈夫なのですよね?
補足
バージョンは、5.6.630(最新)です。 Jcode.pmに移行するには以下の2点を変更するだけで、ほぼいけるという記述をインターネットで見つけたのですが,できません。 (1)require jcode.pl → use Jcode; (2)jcode:: → Jcode:: Jcode.pmでは出来ないということであれば、jcode.plを使用使用とは思っているのですが。。。
jcode.plというライブラリを使用するのですよね? ならば require "jcode.pl"; $line = "アイウエオ"; &jcode'h2z_euc(*$line); print "$line\n"; でイケると思うのですが。。
補足
jcode.plではなく、jcode.plの後継モジュールJcode.pmでは出来ないのですか。 出来ないのであればjcode.plでやります。。。
お礼
(1)"アイウエオ" (2)"ア\nイ\nウ\nエオ" (3)"アイウエオ" (2)や(3)だと半角から全角へ変換されるのですが, (1)だとうまくいきません。 先輩に聞いたところ,Oracleで同じような事をしてくれる関数があるようなので、そちらを試してみることにします。 多数の回答ありがとうございました。