リサイズすると文字が化けちゃうんです
[上に]
[前に]
[次に]
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)
何か良い知恵ありますか?
[上に]
[前に]
[次に]