• ベストアンサー

nkfとjcodeの使い方の違いについて

alfeimの回答

  • ベストアンサー
  • alfeim
  • ベストアンサー率58% (114/195)
回答No.1

jcodeは多分jcode.plの事だろうと思いますが、jcode.plは.plの拡張子(最近では.pmのものもあるみたいです)があらわす通りPerlのコードです。 一般にjcode.plそのものを単独で使用する事はなく、さまざまなPerlプログラムの中からライブラリとして利用されます。 それに対してnkfは単独で漢字コードを変換するプログラムですので、コマンドラインからsendmailに日本語(7bit Thruではない)を通す場合に変換に利用されます(実際にはnkfだけではSubjectに日本語を使う事は出来ませんが・・・) メリット、デメリットは nkfの場合、単独で動作可能なプログラムなのでshellから利用するのが容易である。 デメリットは、各種CPUやマシンに適合させるためにソースコードを使い、対象マシン上で再構築する必要がある事。 jcode.plはPerlを利用する場合、popenなどを利用して外部プロセスを利用するより遥かにスマートである、ポータビリティが高い(nkfはソースを持っていってターゲットマシン上でコンパイルしなければ駄目ですが、jcode.plはファイルをそのまま持っていけば動作可能です)事。 デメリットはフルperlコードであるため、速度はnkfに劣る。 こんな感じでしょうか?

kodai_sumio
質問者

お礼

なるほど・・・。分かりやすい解説をしていただいてありがとうございました。jcode.plばかり使ってきたので、nkfに馴染めなくて困っていました。速度を考えるとnkfの方がいいんですね。これからちょっとずつ勉強してみます。本当にアリガトウございました。

関連するQ&A

  • 【unix】nkfで文字コードを変えずに改行コードを変えたい

    unix(BSD)初心者です。 PHP経由でunixを操作、ファイルの加工をしております。 nkfコマンドにてLF改行をCR+LF改行にしたいのですが、 ・文字コードは無変化で改行コードだけ変える などということはできるのでしょうか? いろいろな文字コードのファイルが混在している場合に文字コードはそのまま保ちつつ改行コードはCR+LFに統一したいのです。 お詳しい方よろしくお願いします。

  • Jcodeについて

    Jcodeについて教えてください。 Shift-jisで処理している文字列でJcodeを使用すると 半角カタカナ→全角カタカナ 半角小文字英字→半角大文字英字 への変換は文字コードをecuにしなくてもうまくいくのですが 全角英数字→半角英数字 に変換するとうまくいきません。 これはどうしてなのでしょうか?

    • ベストアンサー
    • Perl
  • UNIX上で文字コードの一括変換はできますか?

    UNIX上で、文字コードを変換したいのですが、今まではSJISからEUCといった変換にnkfを使用してきましたが、nkfだと1ファイル毎でしか文字コードを変換できませんでした。1行のコマンドでそのディレクトリ内の全てのファイルの文字コードを変換してくれるコマンドはありますでしょうか? UNIX上で実現できれば、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
  • 文字コード

    unixで記述したファイル(恐らくはEUCコードと思われます)はDOS環境や、場合によってはunix上のviやlessなどでも、 ^M が行末に表示されてしまいうっとうしいことがあります。 1)この制御コードは一体何なのですか? 2)どのような場合、この制御コードが挿入されますか?あるいは、どのような場合、このコードが表示されるのですか? 3)"^M"が表示されてしまっている場合、どのようにすれば表示がされなくなるのでしょうか? (その場しのぎ的ではあるが、nkf -s などとしてSJISに変換させれば、dos系のvi や lessではまともに表示されます。他の方法を教えてください...例えば、vi や lessを文字コードを指定して起動するなど...) #そのほか、文字コード関連でツボが有りましたら教えてください。

  • jcode.plのかわり

    jcode.plの jcode::tr() のかわりを探しています。 jcode.plの jcode::tr(\$val,'0-9A-Za-z ()_@-','0-9A-Za-z ()_@-'); をPerl5.18.2で使用するとエラーが出てしまいます。これを回避したい。 プログラムがUTF-8であれば $val =~ tr/0-9A-Za-z ()_@-/0-9A-Za-z ()_@-/; のようにすれば実現可能みたいですが、プログラムはEUCで書かれています。 影響範囲からプログラムの文字コードをかえることはできれば避けたい。 一文字ずつ変換することも考えましたが、この方法ではパフォーマンスに懸念があります。 jacode.plなるものもありますが、これに置き換えるだけでは文字化けしてしまいました。 jcode::tr()のかわりになるような手段はあるのでしょうか?

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

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

    • ベストアンサー
    • Perl
  • 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->euc; ただ、入力コードがシフトJISとは限りませんので、この記述は好ましくないと思っています。 半角カナの文字化けは、webフォームを作られた方なら皆さん経験されていると思うのですが、どうされているのでしょうか? Jcode.pmの文字コード判別は、半角カナが混じっていた場合、かなり長い文字列でないと判別に失敗するようなので、フォームで短い文字列(名前等)を入力させて処理させた場合、ほとんど上手く動かないようなのですが?

    • ベストアンサー
    • Perl
  • jcodeを使ったgetcode

    Perlで日本語を扱う際にjcode.plを使いたいと思いました。 問題点はgetcodeを使用した際に文字コードが出力されなかったということです。 'あ'はsjisと出るのですが 'a'は出力がありません。 文字コードが判別できなくてもなんらかの出力は得られるとWebで見たのでなぜ このような現象になるのか質問させていただきました。 参考にしたサイト http://www.mikeneko.ne.jp/~lab/kcode/jcode.html [ソース] #!/usr/local/bin/perl require './jcode.pl'; print "Content-type: text/html\n\n"; $line = 'あ'; $code = &jcode::getcode(\$line); print "print1 = $code\n"; $line = 'a'; $code = &jcode::getcode(\$line); print "print2 = $code\n"; [結果(コマンドプロンプト上)] Content-type: text/html print1 = sjis print2 = このようになる原因を知りたいです。回答や実行環境への質問などお願いします。 実行環境 1 OS: WindowsXP SP1a webサーバ: Apache 1.3.27 Perl: ActivePerl 5.8.0 ブラウザ: IE6.0 実行環境 2 infoseek無料webスペース

    • ベストアンサー
    • Perl
  • JcodeモジュールとEncodeモジュール

    以下、Perl5.8でJcodeモジュールを使った場合とEncodeモジュールを使った場合の違いについて、知りたいです。 ※そもそもこのモジュールは同時に使ったらだめなのでしょうか? use strict; use utf8; use Jcode; use Encode; my $dat1 = "あイ卯(1)Iⅰ"; Jcode::convert(\$dat1, "utf8"); my $dat2 = "あイ卯(1)Iⅰ"; $dat2 = Encode::encode("utf8", $dat2); 文字コード変換の正しい使い方が知りたいです。

    • ベストアンサー
    • Perl