CGI-BBS > 基礎 > jcode/jcode.pl > 日本語がうまくデコードされない


カレッヂ
カレッヂ


質問者 ふぃら  投稿日 2/5(水) 16:38:17
簡易ショッピングバスケット他いくつかのCGIで試してみましたが、

require 'jcode.pl'

がどうも機能していないようです。

ちなみに・・・
<aフォルダの中身>
public_htmlフォルダ
plフォルダ
<public_htmlフォルダ>
CGIプログラム・HTML関連のファイル全て
jcode.pl
<plフォルダ>
jcode.pl

といった状態で、普通なら
require '../pl/jcode.pl'
か、もしくは
require 'jcode.pl'
で通用するはず・・・と認識しているのですが。

プロバイダ参照:Apache 2.0.43
サーバのOS:WINサーバ
パソコンのOS:WinNT系
エディタ:Notepad
FTPソフト:なし(ローカルテスト中)
サーバ移転:していない
改造:(未選択) 改造前不動
CGI習熟度:middle

質問者 ふぃら  [削除]  投稿日 2/5(水) 17:28:46
自己レスです。
Perlの構造を書いておくのを忘れました。

C:ドライブ直下に・・・
<usrフォルダ>
localフォルダ
<localフォルダ>
bin,eg,html,lib,siteフォルダ
(上記各フォルダにはpmファイル、exeファイルなどがいっぱい)

Perl本体はc:¥usr¥local¥bin内にあります。

回答者 まさ  [削除]  投稿日 2/5(水) 18:35:10
最後のセミコロンは?

require 'jcode.pl';

じゃないですか?

質問者 ふぃら  [削除]  投稿日 2/5(水) 22:47:44
上では書き忘れてましたが、本プログラムではちゃんとつけてあります・・。
バージョン違いでもなさそうだし・・。
回答者 まさ  [削除]  投稿日 2/6(木) 09:22:38
ではどうしてjcode.plの動作が怪しいと思うのですか?
機能していないのではという根拠は何なのでしょうか?

一度jcode.plをフルパスで指定してみては?
あるいはもう一度ダウンロードし直すとか?

質問者 ふぃら  [削除]  投稿日 2/6(木) 10:47:28
フルパスでこう指定しました。

require "/usr/local/bin/jcode.pl"

で、現状ローカルテスト中なので、次のディレクトリに
入れておけばいいと思っていますが。

c:\usr\local\bin
(ここにはPerl本体もある)

・・ですが、「商品A」が「???i?`」と表示されてしまいます。
やはりバージョン違いなのでしょうか?

Perlのバージョン(使用環境は5)によってCGIのデコード部分が
変わるということを聞いたことがありますが、
詳しいことは分かりません。
今は、デコード部分をこう記述しています。
例)
jcode::convert(\$name,'sjis');
で、また別の人に聞いたところ、
&jcode'convert(*name,'sjis');
という答えも返ってきました。
どちらがいいんでしょうか?それとも両方とも違うとか。
回答者 まさ  [削除]  投稿日 2/6(木) 11:28:10
ローカルマシンというのはWindowsですよね。
それでしたら、

require "c:\usr\local\bin\jcode.pl";

としてみて下さい。

>jcode::convert(\$name,'sjis');
>で、また別の人に聞いたところ、
>&jcode'convert(*name,'sjis');

jcode::convert(\$name,'sjis');
この書き方はPerl5以上の書き方です。Perl4以下なら動作しません。

&jcode'convert(*name,'sjis');
これはPerl4以下でも5以上でもどちらでも動作します。

しかし動作環境とサーバー環境がPerl5以上ならば上の書き方で問題ないです。

>・・ですが、「商品A」が「???i?`」と表示されてしまいます。

これは直接jcode.plがおかしいのではなく、単純に文字コードの違いによる文字化け
では?

CGIに送られてくる文字コードは何ですか?
出力する際にHTMLの文字コードを指定していますか?



質問者 ふぃら  [削除]  投稿日 2/6(木) 16:27:33
文字コードの該当部分はここのサイトから
関係のファイルは全てダウンロードしたまま
まるまるローカル環境に入れて、いじっていません。
いじったとしても、上述のjcode〜の部分で、
そこも「sjis」の記述になってました。
<meta〜>のタグも表示されるようになってますし、
Shift_JISも指定してありました。
回答者 まさ  [削除]  投稿日 2/6(木) 21:25:47
わたしはそのショッピングバスケットがどんなものか知りませんのであくまで一般論
です。

jcode.plを通す前と後で文字コードとその化けている文字そのものを出力すれば結論
は早いと思います。

jcode.plで文字コードがわかれば、明示的に引数で変換前のコードを指定するのも
いいかもしれません。

そもそもjcode.plが正常に機能していないと言うのも大胆な発言ですね。
jcode.plはかなり古いモジュールでそれなりの実績もあります。
もちろんjcode.plも100%じゃないので、おかしい場合もあるかもしれませんが、わた
しの経験では一見jcode.plがおかしく見えても、多くの場合はスクリプトと文字コード
の勘違いから起こるものがほとんです。
もう一度見直してみては?

あるいはjcode.plを使わずにJcode.pmを使うと言う手もあります。

その変換前の文字はURLに引数として渡してませんよね。
最近のブラウザーはUTF-8でURLを送信するのでそれではjcode.plが使えません。
その場合もJcode.pmを使うといいでしょう。


質問者 ふぃら  [削除]  投稿日 2/7(金) 09:44:09
いろいろとありがとうございました。
あとは勉強して何とかしてみます。

このページは終了したので返信(回答)は書きこめません
 


Web裏技