• ベストアンサー

半角カナから全角カナに変換

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"; どなたかご回答よろしくお願いいたします。

質問者が選んだベストアンサー

  • ベストアンサー
  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.8

$line に入っている文字コードの判別に失敗しているのかもしれません。 Jcode->new($line,'euc')->h2z->sjis; のように指定すると上手くいきませんか? sjis にする必要が無い場合は Jcode->new($line,'euc')->h2z; でいいはずです。

you_s
質問者

お礼

(1)"アイウエオ" (2)"ア\nイ\nウ\nエオ" (3)"アイウエオ" (2)や(3)だと半角から全角へ変換されるのですが, (1)だとうまくいきません。 先輩に聞いたところ,Oracleで同じような事をしてくれる関数があるようなので、そちらを試してみることにします。 多数の回答ありがとうございました。

その他の回答 (7)

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.7

> 全角から半角への変換はうまくいったのですが、 これは、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; です。

you_s
質問者

補足

>これは、Jcode->new($line)->z2h->euc; としたと言うことですか? そうです。すみません。説明不足で… Jcode->new($line)->sjis; 上記を試してみましたが,sjisへ変換できないのです。 変換さえできればうまくいくと思うのですが…

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.6

use Jcode; $line = "アイウエオ"; $s = Jcode->new($line)->h2z->euc; print $s,"\n"; で上手くいきませんか?

you_s
質問者

補足

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

  • 2nd
  • ベストアンサー率30% (19/63)
回答No.5

そういえば、私も &Jcode::h2z がうまく使えなかった記憶があります。 で、結局以下のようにしました。 use Jcode::H2Z; $line = 'アイウエオ'; &Jcode::H2Z::h2z(\$line); print $line, "\n"; Jcode モジュールをインストールしたのなら、Jcode::H2Z はインストール されているはずなので、これでできるのではないかと。 Jcode.pm を読むと、Jcode::h2z って Jcode::H2Z::h2z を呼び出していた だけだったので。

you_s
質問者

補足

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

  • alicia-y
  • ベストアンサー率40% (85/208)
回答No.4

Jcode.pm には h2z_euc は無いみたいですが、 use Jcode; $s = Jcode->new($s)->h2z->euc; で出来ませんか。

you_s
質問者

補足

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

  • slackware
  • ベストアンサー率59% (22/37)
回答No.3

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

you_s
質問者

補足

$ato = &Jcode::h2z(\$line); $ato = &{$Jcode::h2z{'euc'}}(\$line) 上記のように、インターネットなどで記載されている使用方法は全てやってみたのですが,うまくいかないのです。 やはりjcode.plでないとだめなのでしょうか。

noname#225520
noname#225520
回答No.2

Jcode.pmは使ったことがありませんでした。 Perlのバージョン等は大丈夫なのですよね?

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

補足

バージョンは、5.6.630(最新)です。 Jcode.pmに移行するには以下の2点を変更するだけで、ほぼいけるという記述をインターネットで見つけたのですが,できません。 (1)require jcode.pl → use Jcode; (2)jcode:: → Jcode:: Jcode.pmでは出来ないということであれば、jcode.plを使用使用とは思っているのですが。。。

noname#225520
noname#225520
回答No.1

jcode.plというライブラリを使用するのですよね? ならば require "jcode.pl"; $line = "アイウエオ"; &jcode'h2z_euc(*$line); print "$line\n"; でイケると思うのですが。。

you_s
質問者

補足

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

関連するQ&A