リサイズすると文字が化けちゃうんです

[上に] [前に] [次に]
pro [E-Mail] 1998/06/11(木) 20:58:22
こんにちは

私はCGIをPerlでかいてるんですが、ブラウザをリサイズすると
CGIがはいたHTMLが文字化けをしてしまいます。

文字化け対策としてやってみたこと。
1.print 'Content-type: text/html; charset="EUC-JP"';
  print "\n\n";
    を行って文字コードを宣言。もちろんリサイズする前は文字化けしないが
  リサイズ後はPerlを再実行するわけではないので有効じゃない。

2.おまじないを最初に書く
  <!--糺の神-->ってのを最初の方に埋め込みました。
  #どうしてかはhttp://www.cup.com/negi/tips/mojibake.htmlを参照。
   これを入れると文字化けを防げるそうな。
  でもだめでした。

3.文字化けする文字の後ろに\をつける
   やっぱりだめでした。

何か、情報を知ってる方、助けて下さい。
おねがいします。。。

B-Cus 1998/06/12(金) 05:44:44
根本的解決じゃないかもしれませんが、僕はJISが一番
化けにくいという認識を持っているので、CGIの先頭に

open(STDOUT,"|nkf -j");

ってのを書いてます。

mo [E-Mail] 1998/06/12(金) 13:25:53
ドキュメントのコードは EUC ですか?
Content-type: text/html; charset="EUC-JP"
とかいて SJIS で出力してるってことはないですか?

また、EUC で出力すると、確実に文字化けしないようにするってことはできない
みたいです。以前、Windows で文字化けする問題を解決しようとしましたが、
EUC だと無理みたいです。どうもブラウザのバグかもしれません。

# 最近、Content-type: text/html; charset="ISO-2022-JP" と書いて SJIS で
# 保存されてるページをよく見かけるようになって困ってます。
# UNIX 上の NN3 でみると文字化けして読めないのです。
# さらに困ったことに、SGI の 4Dwm という Window マネージャは、
# 化けた <TITLE> を出力しようとして core dump てしまいます。

pro [E-Mail] 1998/06/12(金) 13:55:22
proです。

PerlはUNIXで動いているのでEUCで結果を出力しているはずです。
ブラウザはNetScape3.01[JA]でWindowsNTみてます。

EUCはよくないんですかね。コードを変えてみようかな。

mm 1998/06/12(金) 19:48:09
>PerlはUNIXで動いているのでEUCで結果を出力しているはずです。
うちのサーバーのperlもunixで動いてますが、Shift-JISを出力します。
(このラウンジのCGIもその筈…)
もちろんこれは、私がShift-JISを使ったからで、perlが何を出力するかは、
pro さんがperlのソース上でどの文字コードを使ったかによって決まってきます。

B-Cus 1998/06/12(金) 19:52:27
> PerlはUNIXで動いているのでEUCで結果を出力しているはずです。

UNIXだからってEUCとは限りません。スクリプトをJISで書けば
JISになるし、SJISで書けばSJISが出力されます。

pro [E-Mail] 1998/06/12(金) 20:04:31
>UNIXだからってEUCとは限りません。スクリプトをJISで書けば
>JISになるし、SJISで書けばSJISが出力されます。

これって、今あるソースファイルをnkfなりなんなりでSJISとかJISにかえれば
いいってことですか?
#もちろんContent-typeは変えますけど。

いろいろ試してみたいと思います。
mmさん、B-Cusさんありがとうございます!

pro [E-Mail] 1998/06/12(金) 21:04:34
>UNIXだからってEUCとは限りません。スクリプトをJISで書けば
>JISになるし、SJISで書けばSJISが出力されます。

これって、今あるソースファイルをnkfなりなんなりでSJISとかJISにかえれば
いいってことですか?
#もちろんContent-typeは変えますけど。

いろいろ試してみたいと思います。
mmさん、B-Cusさんありがとうございます!

mm 1998/06/12(金) 22:43:11
まずは、proさんが書かれたperlのソースの日本語のコードがなんであるかが
問題でしょう。
本当にEUCで書かれているかどうかを教えてください。もし間違いなくEUCなら、
moさんのメッセージを見るかぎり、コードを変換した方がいいようですね。
charsetを変えて、ソースのコードを変換するか、B-Cusさんの方法でやるのが
いいのかな…
ソースのコードを変換するなら、わざわざunixに行ってnkfを使わなくても、
WindowsNT上のエディタでもできると思うのですが…

でも、WindowsNTはよく知らないのですが、普通にperlのソースを作成すれば
日本語はShift-JISになるのでは?

tetsuya 1998/06/15(月) 11:50:07
とりあえずsjisかjisにしてみたらいかがでしょ。
cat ****.*** |nkf -s > ****.***.sjis
とか。大体は自動認識で勝手に変換(手抜き

ちなみに普通にPerlソースを作成すればsjisになるのは
Windowsだけじゃないかと・・・・・。
muleで書いている場合は、一応自分の自由に設定できますし。

pro [E-Mail] 1998/06/15(月) 17:35:29
[[解決]]
proです。
私の作成したソースは間違いなくEUCでした。
で、ソースをSJISに変換して実行したところ
ブラウザをリサイズしても文字化けはおきませんでした。
しかし、UNIX上で作成しているのでSJISでファイルをもっているのは
不便きわまりないので、B-Cusのように
open(STDOUT,"|nkf -s");
ってかいてやってみました。
できました。(^o^)/
でも、ブラウザのメニューから表示-文書情報をやってみたら
ブラウザは見事にiso-2022-jpって判断してました。。。

やっぱりおとなしくJISにします。
みなさんありがとうございました。

pro [E-Mail] 1998/06/15(月) 21:25:17
再びproです。。。

nkfとかが入ってないシステム用に、
open(STDOUT,"| henkan.pl");
ってな感じで変換を行うPerlを書いてみたんです。
中身はこんなんです。

require "jcode.pl";
while (<>) {
   &jcode'convert(*_,"sjis");
   print $_;
}
exit;

でも、これだと標準出力の最後が検知できないらしく
ブラウザではタイムアウトになってしまいます。
#whileをぬけてくれない(T T)

何か良い知恵ありますか?


[上に] [前に] [次に]