WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:文字化けについて

0:[投稿] atusi [2002/02/20 00:09 ][環境:WIN+IE WIN系+Perl]

以前この掲示板で質問させていただいた際に、
「スクリプトをEUCで保存しないと文字化けする」

と教えていただいたのですが、

例えば掲示板のスクリプトをEUCで保存した場合、
ユーザにどんな文字列を書き込まれても
文字化けすることはないのでしょうか?

SHIFT-JISで保存したPerlスクリプトで、
ユーザからの書き込みで文字化けが発生して
困っています。

よろしくお願いします。


1:[回答] TOM neko [2002/02/20 01:15 ]

スクリプトがShift_JISでも、文字化けしないように書けばそうそう文字化けはしませんよ。

まず、ユーザに書き込まれた文字のコードを、jcode.pl等で変換していますか? ブラウザにもよりますが、送られてくるのがShift_JISとは限らないので、受け取ったらチェックして、違えば変換する必要があります。スクリプトがEUCならEUCに変換とか。

つぎに、スクリプトをEUCで書いた方がいいのは、Shift_JISでは、仮名漢字等2バイト文字の後ろ半分に、「\」などのスクリプトに誤解される文字を含んでいるからです。EUCならその心配がないので、正規表現で直接処理できるし、出力文字を""で囲っも、特定の文字が化けないよう「\」を入れる必要がありません。

なので、Shift_JISの文字列の操作では、上記の正規表現辺りでおかしくなってる可能性はあります。だとすればEUCにすれば直ります。


2:[回答] 通行人 [2002/02/20 01:28 ]

SJISで書いても特に問題は無いですよ。

但し文字コード範囲が重なる問題からEUCとSJISの識別が難しく
なる事と、perlがEUCしかサポートしてない為(細かい突っ込みは
他の人へ譲る)問題を抱えています。

SJISを採用して、スクリプトファイルの扱いやすさを取るか(Winの場合)
EUCに切り替えて文字化けの危険を回避するかでしょう。

個人で使う場合は前者の方が扱いやすいが、信頼性重視の場合は
EUCの方が良いのではないでしょうか。

手っ取り早く言えばSJISで書く場合は、文字化けの危険を常に意識
した作りにしなければいけないという事です。

$a='表';
$b='票';
s/$a/$b/;

こんな構文で、SJISで書いたものは簡単に意図しない結果となります。


3:[回答] 通行人 [2002/02/20 01:28 ]

被った・・・


4:[回答] TOM neko [2002/02/20 01:50 ]

>>3
無問題


5:[質問] atusi [2002/02/20 10:02 ]

緊急措置として、

ユーザからのデータに
\を入れてエスケープすることで
文字化け回避することは出来るのでしょうか?


6:[回答] ヨシミ [2002/02/20 11:07 ]

>>5
ユーザからのデータに \ を居れてエスケープするというのはどうやるのでしょうか?
回避できるかどうか以前に。


7:[質問] atusi [2002/02/20 13:05 ]

とりあえず文字化けしている部分のデータファイルを開いて、
手作業で\を入れてみようかと思っています。

当のデータファイルが現在、手元で扱いにくい状況でして、
質問させて頂きました。


8:[回答] ヨシミ [2002/02/20 13:28 ]

データの修復でしたら可能だと思います。方法もお応えできます。

ただ、現状を教えてほしのですが、
スクリプトは SJIS。
で、SJISで投稿された記事は問題ないが、一部の記事がEUC-JPで化けている、
で宜しいですか?


9:[回答] ヨシミ [2002/02/20 13:41 ]

ちなみに
require './jcode.pl';
&jcode::convert(\$line, "sjis");
を然るべき場所にいれればその掲示板で問題なく表示されるでしょう。

$line の部分はそのスクリプトにおける適当なものに置き換えてください。

ところで、現在 perl の作業が出来ない現場にいて、
データはあるが読めないとかですか?
でしたら たとえば MSIE などで表示して、エンコードで日本語(EUC)にすれば EUC-JP 部分は読めるはずです。


10:[完了] atusi [2002/02/20 17:42 ]

なるほど!どうもすいませんでした。どうもありがとうございました!!!

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World