アプリ版:「スタンプのみでお礼する」機能のリリースについて

Perlで
Shift-JIS形式のファイルを読み込み、その内容をUTF8形式のHTMLファイルに保存する場合どのように処理したら良いのでしょうか?
下記のような処理だと文字化けしてしまいます。

---Shift-JISのファイルを読み込む
open(IN,"$file");
@list = (<IN>);
close(IN);

---内容を$htmlにセットして
---UTF8形式で書き出したい
open(OUT,">$file");
print OUT $html;
close(OUT);

質問者からの補足コメント

  • 回答ありがとうございます。
    ファイル形式はutf8に出来ました。
    しかし中身が文字化けしてしまいます。
    $htmlの日本語をutf8に変換する必要があるようです。
    変数をutf8に変換するにはどのようにしたら良いでしょうか?

    No.1の回答に寄せられた補足コメントです。 補足日時:2016/07/17 10:45
  • うれしい

    なんか出来たかもしれません。
    cgiのファイル自体がutf8になっていなかったようです。
    でさらに下を追加したら文字化けしなくなりました。
    use Encode;
    use utf8;

    これでちょっといろいろ試してみます。
    ありがとうございました。

      補足日時:2016/07/17 11:05
  • うーん・・・

    あっダメでした。
    $htmlのShift-JISが文字化けしたままでした。
    $htmlをutf8に変換するには
    どうすれば良いでしょうか?

      補足日時:2016/07/17 11:16
  • うーん・・・

    ちょっと調べて見ましたが簡単には分かりませんでした。
    ご存知でしたら教えてください。
    こちらの環境は
    Windows10pro
    Perl V5.16.3
    です。

    No.2の回答に寄せられた補足コメントです。 補足日時:2016/07/17 14:58
  • HAPPY

    ありがとうございます。
    お手数をおかけしました。
    元の読みだすファイルの形式がUTF-8形式になっていたようです。
    これをshift_jis形式に変更して読み込んだらうまく行きました。

    No.3の回答に寄せられた補足コメントです。 補足日時:2016/07/17 15:05

A 回答 (3件)

よほど古いバージョンでなければ、次のような流れにするとよいでしょう。



外部から取り込んだものは、decodeでutf8フラグ付き文字列にする
 または、open,binmodeで文字コードを指定して、utf8フラグ付き文字列で取り込む

処理: 「全角文字」も1文字として処理できる

出力先の文字コードに encode で変換する
 または、open,binmodeで文字コードを指定してしておく

http://www.lr.pi.titech.ac.jp/~abekawa/perl/perl …


例えば、その内容なら次のようにします。
open(IN,"$file");
→open(IN,"<:encoding(shift_jis)",$file);
open(OUT,">$file");
→open(OUT,">:utf8",$file);
場合によっては、「内容を$htmlにセット」の部分にも変更が必要かもしれません。
この回答への補足あり
    • good
    • 0

nkfとか使えないの?

この回答への補足あり
    • good
    • 0

文字化けの原因を調査しましょう。



・元のファイルは本当にShift_JISなのか
・出力されたファイルは本当にUTF-8なのか
 →出力はUTF-8になっているが、ブラウザがUTF-8にならない
・「---内容を$htmlにセットして」の箇所に問題がある

ありがちなのが
・元のファイルに charset=shift_jis 等の記述がある
→出力にもそのまま残っている
というものです。そういうことは無いですか?
この回答への補足あり
    • good
    • 0

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