電子書籍の厳選無料作品が豊富!

HTMLのFormから日本語文字を入力し、一旦データに保存し、再度PerlからHTML出力すると
一部の文字が文字化けします。(パソコン→パRン)
どうしたら解決できるか教えてください。

入出力側Windows サーバー側UNIX スクリプトUNICODE CRです。perl V5.0

A 回答 (4件)

スクリプトをSJISで書いていますね。

それが原因です。

「ソ」の2バイト目に、「\」と同じコードが入っているため、「コ」の1バイト目をエスクケープシーケンスとして取り込んでしまったため、文字化けを起こしました。

CGIは、EUCで記述しなければならない。みたいな記述を読んだことがありませんか? UNIXの内部漢字コードはEUCです。ですので、CGIもEUCで記述する必要があります。

そう言う意味では、文字化けしたことが、UNIX的には正常な動作。といえます。
    • good
    • 0
この回答へのお礼

Dpop様 お世話になっております。
お陰様で、上手く作動できました。
スクリプト、データファイルを全てeucに直しHTMLに表示する直前に呼び出したデータを
jcode::convertで変換するなどして(これは必要なかったかもしれませんが)処理できました。
スクリプトが全てSjisに変換するよう処理していましたので、修正するのに手間取りました。
また、データが一度でなぜか変換できず、2回同じことを繰り返して、変換できたりと、
初心者なので、苦労しました。
(jcode::getcodeで結果を見ながらでしたので)
>CGIは、EUCで記述しなければならない。みたいな記述を読んだことがありませんか?
確か読んだことがあります。
もっと勉強します。ありがとうございました。

お礼日時:2004/04/17 15:24

nkfコマンドでSJISからEUCに変換できます。


詳しくは、man nkfと入力してみてください。
    • good
    • 0
この回答へのお礼

tatsu99 様 お世話になります。
Dpop 様のご指摘で早速作業していまして、お返事が遅れました。
今回はjcode::convertを使いましたが、多分nkfを使ったほうが、処理的にははやいでしょうね。
これから練習してみます。ありがとうございました。

お礼日時:2004/04/17 15:30

つづけて #1 です。

(一度で書け<自分)

今、「パソコン」のUTF-8のコードを調べてみました。やはりビンゴでした。

パ : 8370
ソ : 835C
コ : 8352
ン : 8393

ソの2バイト目に \ が入っていますね。
Encode.pm などで、一度適当な文字コードに変換されてから、次の処理をさせてはいかがでしょうか?

この回答への補足

早速ご返事いただきましてありがとうございます。
私の間違いでS-JISでした。
今、エディターで変換して確認使用としています。
Perl内の日本語が全て文字化けして、直さなければならないようです。
結果お知らせまで時間をちょうだいいたします。

補足日時:2004/04/16 16:24
    • good
    • 0

#1 です。



UNICODEでしたね。はやとちりしました。
理由は、やっぱり \ だと思います。使用している UNICODE は UTF-8 ですか? UTF-7 ですか?
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!