• ベストアンサー

HTMLのFORMで入力された文字を、データに保存後、再度表示すると文字化けが。

HTMLのFormから日本語文字を入力し、一旦データに保存し、再度PerlからHTML出力すると 一部の文字が文字化けします。(パソコン→パRン) どうしたら解決できるか教えてください。 入出力側Windows サーバー側UNIX スクリプトUNICODE CRです。perl V5.0

質問者が選んだベストアンサー

  • ベストアンサー
  • Dpop
  • ベストアンサー率51% (279/544)
回答No.1

スクリプトをSJISで書いていますね。それが原因です。 「ソ」の2バイト目に、「\」と同じコードが入っているため、「コ」の1バイト目をエスクケープシーケンスとして取り込んでしまったため、文字化けを起こしました。 CGIは、EUCで記述しなければならない。みたいな記述を読んだことがありませんか? UNIXの内部漢字コードはEUCです。ですので、CGIもEUCで記述する必要があります。 そう言う意味では、文字化けしたことが、UNIX的には正常な動作。といえます。

ctpsys
質問者

お礼

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

その他の回答 (3)

  • tatsu99
  • ベストアンサー率52% (391/751)
回答No.4

nkfコマンドでSJISからEUCに変換できます。 詳しくは、man nkfと入力してみてください。

ctpsys
質問者

お礼

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

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.3

つづけて #1 です。(一度で書け<自分) 今、「パソコン」のUTF-8のコードを調べてみました。やはりビンゴでした。 パ : 8370 ソ : 835C コ : 8352 ン : 8393 ソの2バイト目に \ が入っていますね。 Encode.pm などで、一度適当な文字コードに変換されてから、次の処理をさせてはいかがでしょうか?

ctpsys
質問者

補足

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

  • Dpop
  • ベストアンサー率51% (279/544)
回答No.2

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

関連するQ&A