• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:jcode.plのかわり)

Perl5.18.2でjcode::tr()のかわりを探しています

kumozの回答

  • kumoz
  • ベストアンサー率64% (120/185)
回答No.6

(株) のような特殊な文字では、Jcode から利用している Encode.pm でもうまく行かないことがあります。(株) の場合は、「euc-jp → utf8」は変換できるが、「utf8 → euc-jp」は変換できないようです (No4 の補足に書かれているとおりです)。 use Encode; print encode('utf8', decode('euc-jp', "\xAD\xEA")), "\n"; # 端末UTF-8: OK print encode('euc-jp', decode('utf8', "\xE3\x88\xB1")), "\n"; # 端末euc-jp: NG 日本語変換ユーティリティ nkf が NKF.pm を提供しています。Encode.pm で「UTF-8バイト <-> UTF-8内部」を、NKF.pm で「UTF-8バイト <-> EUC-JP」を処理すると、うまく行くかも?

miyan2000
質問者

補足

文字を EUC→UTF-8→EUC にするだけなら Unicode::Japanese を使えば可能でした。 問題は任意の文字を変換することです。 0-9a-z を 0-9a-z のように半角にするとか。全角文字を全部半角にすることは出来るんですが 上記のように英数字だけとかが出来ないんです。

関連するQ&A

  • jcode.plのバグでしょうか?KCctchでの質問です。

    PerlのプログラムをKCatch.pmで調べていましたが。 次のような表示がされました。 jcode.plのバグでしょうか?プログラムに問題があるのでしょうか? お教えいただければ幸いです。 ../data/clients.txtが開けません。 Catch: Thu Jun 21 08:54:31 2001 -------------------------------------------------------------------------------- [jcode.pl:366:warn] Use of uninitialized value at jcode.pl line 366. > sub max { $_[ $[ + ($_[$[] < $_[$[+1]) ]; } [jcode.pl:362:warn] Use of uninitialized value at jcode.pl line 362. > $code = ('euc', undef, 'sjis')[($sjis<=>$euc) + $[ + 1]; -------------------------------------------------------------------------------- anquit.cgi with Perl 5.00502 for freebsd

    • ベストアンサー
    • Perl
  • jcode.pl

    日記などのスクリプトを作成しているのですが、とりあえず今まで、そこまでの理由もわからず他のスクリプトに習ってjcode.plをデコード処理部で &jcode'convert(*value,'sjis'); &jcode'convert(*name,'sjis'); のように使ってきました。 ですが、たまたま今回、jcode.pl等を書き忘れてしまったのですが、ブラウザから投稿してみても文字化けという文字化けが起こりません。スクリプト自身はsjisで書いています。ログファイルもどうやらsjisコードで書き込まれているようなのですが、それでもjcode.plは必要なのでしょうか。windows XP にApache + Active Perl での動作と、@niftyで設置して動作を確認しました。 この場合、jcode.plは必要あるのでしょうか?

    • ベストアンサー
    • Perl
  • jcode.plについて

    次のエラーが発生します。 Undefined subroutine &jcode::convf called at ./jcode.pl line 291. カレントに、jcode.plを置いているだけでは動作するのでしょうか? また、Jcode.pmを使った場合、 &Jcode::convert(\$test_sjis, "sjis"); と大文字にしないといけないのですが、これは仕方ないことでしょうか? てっきり、 require './jcode.pl'と use Jcode.pmの差し替えで済むと思っていました。 #!/usr/bin/perl require './jcode.pl'; my $test = "パソコン結構です。"; #文字化けチェック用 my $test_sjis = $test; my $test_ujis = $test; my $test_jis = $test; &jcode::convert(\$test_sjis, "sjis"); &jcode::convert(\$test_ujis, "ujis"); &jcode::convert(\$test_jis, "jis"); print "\$test_sjis=[$test_sjis]\n"; print "\$test_ujis=[$test_ujis]\n"; print "\$test_jis =[$test_jis]\n"; exit; __END__

    • ベストアンサー
    • Perl
  • 全角英数字を半角英数字に変換したい

    全角英数字を半角英数字に変換する方法を教えて下さい。 $data =~ tr/0-9a-zA-Z/0-9a-zA-Z/; 以上のようにした場合、J-perl意外では望みどおりに変換されません。 jcode.plをつかって 全角英数字を半角英数字に変換する方法があると、 書かれていた方がいましたので、 できればjcode.plをつかった場合の 具体的なスクリプトの書き方を教えて下さい。 よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • Jcode,pmを使った連続変換に失敗してしまう

    フォームから入力された内容について、 全角数字を半角数字へ、半角カナを全角カナへ変換したいので、 Jcode.pmを使ったのですが、たとえば、 「全角数字を半角数字」だけとか、「半角カナを全角カナ」だけ だとうまくできますが、連続して両方変換しようとすると Jcodeのエラー「Not a SCALAR reference at Jcode.pm line 626」がかえってきてしまいます。 このようなコードを書いています。 use Jcode; $AAA = 'あいう012カキクser'; (実際はフォームからのデータ) &Jcode::convert(\$AAA, 'euc'); my $j = Jcode->new(); $j->set($AAA, 'euc'); $BBB = $j->tr('0-9A-Za-z', '0-9A-Za-z'); (数字変換:ここまでは成功する) my $j = Jcode->new(); $j->set($BBB, 'euc'); #1 $CCC = $j->h2z->euc; (カナ変換:失敗してエラーが発生する) コードはEUCで書いています。どうも #1 のところで、 2行上であらかじめJcodeによって変換されたものが格納されている 変数$BBBを指定するとエラーが起きるようです。#1のところで、 $j->set($AAA, 'euc'); #1 $CCC = $j->h2z->euc; とするとエラーは起きないのです。 変換の順番をいれかえても現象は同じでした。 どうすれば両方の変換ができるようになるでしょうか。 どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • jcode.pl 使い方

    いままで、日本語を使わなかったのですが、 今、開発中のCGIでは日本語を処理しています。 ローカルサーバでのテストでは問題なかったのですが、βテストを開始してみると、環境によって文字化け。 出力する同じHTMLの中に場合によってEUCとS-JISなどが混在する状況になってしまいました。 そこで、jcode.plを使用し、コードの統一を行おうと思うのですが、日本語での解説ページまた、使用方法を解説している質問、回答が見つからなかったので、関数の使用方法を教えていただきたく思います。 私は、英語がすごく苦手なのでjcode.plの中の使用方法を見ても全く読めなかったのです。 日本語で分かりやすく書いていただけると幸いです。

    • ベストアンサー
    • Perl
  • 「jcode.pl」というファイルはどこにUPすべきでしょう?

    「jcode.pl」というファイルはどこにUPすべきでしょう? ただいまサーバー移転をしているのですが(サーバー移転は初めてです) 移転後、ひとつひとつファイルを確認していると「jcode.pl」というファイルを発見しました。 拡張子から、Perlで記述されたプログラムかな?と判断いたしました。 もしそうならば、サーバーで指定されているPerlのパスにしたがって移動させるべきでしょうか? ちなみにこのファイルは、サーバーの(いじれる部分の)第2階層にはいっています。 Perlのパスは /usr/local/bin/perl です。 しかし、上記のパスの位置に、私が入って行くことは出来ません。 動かす必要はあるのでしょうか? 当方初心者です。まとはずれな質問をしているかもしれませんが どうぞよろしくお願い致します。

  • jcode.plのconvertを使用しなければならない場面とは?

    こんにちは。 jcode.plのconvertがjis,sjis,euc 間の相互変換が 行えるのはわかりました。 しかしながら、その用途がよくわかりません。 日本語にはその3種類の漢字コードがよく使われているのは なんとなくわかるのですが それを例えば &jcode::convert(\$test,'sjis'); というように、sjisにするというのは、どのような場面があって どのような必要性があってそのようにするのか? またeucに変換しなければならない場面等、 ネットで調べましたがその点がよくわからないのです。 例えば、Windows環境で生成されたテキストファイルの文字列を読み込んで Linux環境のPerlで出力しようとする時に、不具合が出るので 日本語は必ずEUCで変換する、など。 (この文章が正しいのかどうか適当です。 このような場面が世の中にはあって、その場合はこうする、というような 例として書きました) ご存知の方、どうぞよろしくお願いします。

    • ベストアンサー
    • Perl
  • 機種依存文字(株)のコード変換について

    perlのバージョンがあがった関係で、jcode.plをJcode.pmに対応する為に記述方法の変更に奮闘中です 機種依存文字(株)に関してうまくいかないようで、下記のように文字化けしてしまいました 例1) $a="あ(株)";->あ+機種依存文字(株) Jcode::convert(\$a,'euc'); print"$a"; ->あ? 例2) $a="あ(株)";->あ+機種依存文字(株) $a= jcode($a)->h2z->euc; print"$a"; ->あ? 例3) $a="あ(株)";->あ+機種依存文字(株) $a = Jcode->new($a,"euc")->tr("あ","わ")->h2z->euc; print"$a"; ->わ? 各記述の後、$a内の機種依存文字(株)は?になってしまいます 機種依存文字(株)としてそのまま認識したいのですが、どのような記述にすればいいのかわかりません (機種依存文字(株)以外の文字化けはまだ調べていません) ※perl5.8.7では認識されず、以前のperlのバージョン5.005_03ではそのまま認識されています ご教授宜しく御願いします

    • ベストアンサー
    • Perl
  • Jcodeモジュールの代わりにjcode.plで代用可能でしょうか?

    こんばんわ。前回質問したときに、 回答をしていただいた方、ありがとうございました。 原因は、結局のところ、サーバー会社の自分の使っているサーバーに ImageMagickがインストール?されていなかったみたいでした。 使えないのですが、(使用では使えることになっていた。) と、連絡したところ、無事使えるようになりました。 ありがとうございました。 ですが、実際、ImageMagickを使ってみて、 その機能の一部である、文字合成については英数字のみできました。 プログラムのuseにある、Jcodeが、働いていないみたいでした。 これはサーバーのサポート外なので、どうしようもないのですが。 そこで、思いついたのは、jcode.plを使って、なんとかならないかなー?と、思ったのですが、これはさすがに、無理でしょうか? 当然できたとしても難しいとは思うのですが、どうでしょう? 無理でしょうか? できるのでしょうか?できたとしても、かなり難しいのでしょうか? できるとしたら、どんな感じに組めばいいのか、参考になるアドバイスがいただけたらと、思っているのですが。 よろしくお願いします。 ↓は日本語が表示されなかった、プログラムです。 #!/usr/local/bin/perl -w use strict; use Jcode; use Image::Magick; # 画像を指定 my $file = "sample.jpg"; # 合成したい文字列 my $text = "ABC123日本語"; # UTF-8へ変換 $text = jcode($text)->utf8; # オブジェクト作成 my $image = Image::Magick->new; # 画像読み込み $image->Read($file); # 文字を記入する $image->Annotate(text=>$text, stroke=>'#FFFFFF', fill=>'#005599', font=>'sazanami-gothic.ttf', pointsize=>'36', x=>'20', y=>'40', encoding=>'UTF-8'); # 画像出力 print "Content-type: image/jpeg\n\n"; binmode STDOUT; $image->Write('jpeg:-'); undef $image; exit; よろしくお願いします。 ありがとうございました。 よろしくお願いします。