utf-8のCSVをshift_jisに変換する方法はある?

このQ&Aのポイント
  • Perl5.8でUTF-8のCSVをダウンロードする際、エクセルで開く際の支障を解消するために、文字コードをshift_jisに変換したい場合はどのようにすれば良いでしょうか?
  • 現在のコードでは、ダウンロードしたUTF-8のCSVデータをそのまま出力していますが、開く際の文字化けを防ぐためにはどのように修正すれば良いでしょうか?
  • CSVのダウンロード時に、出力するデータの文字コードをUTF-8からshift_jisに変換する方法を教えてください。
回答を見る
  • ベストアンサー

utf-8のCSVをshift_jisに変換したい

Perl5.8でCSVをダウンロードできる仕組みをつくっています。 utf-8でコードを記述しているため当然ながらダウンロードしたCSVデータもutf-8です。 しかしながらエクセルでダブルクリックで開く場合どうしてもutf-8だと支障があるため、 shift-jis(もしくはcp932)で開きたいのです。 ダウンロード時に文字とファイルをshift_jisに変換する方法はございませんでしょうか? 以下作成済みのコード ------------------------------------------------------- if(!open(OUT,"$CSV_FILE")){&error('CSVデーターファイルがありません'); } else{ @csvdata=<OUT>; close(OUT); } foreach(@csvdata){ $downloaddata .= $_; } print "Content-Disposition: attachment; filename=$CSV_FILE_NAME\n\n"; print $downloaddata; exit; ------------------------------------------------------- 何卒よろしくお願いいたします。

  • Perl
  • 回答数1
  • ありがとう数1

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

  • ベストアンサー
回答No.1

-------------- foreach(@csvdata){ use Encode; # この行と Encode::from_to( $_, 'utf8', 'shiftjis' ); # この行を挿入 $downloaddata .= $_; } -------------- 上記のように2行挿入してみてください。 PerlのバージョンによってはEncodeモジュールが入ってない場合はエラーになります。 お試しください。

参考URL:
http://okwave.jp/qa/q7584615.html
bakusui
質問者

お礼

さっそく施してみました。 ばっちりできました! 助かりました。 ありがとうございました。

関連するQ&A

  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • UTF8CSVをシフトJISCSVへ文字コード変換

    UTF8形式CSVデータをシフトJIS形式CSVデータに 文字コード変換するにはVBAプログラムの勉強を すれば可能でしょうか??

  • UTF-8→JISへ変換

    http://www.php-labo.net/ で配布のフリーPHPを使わせてもらっていますが、文字コードがUTF-8形式であり、当方Windows環境やホームページビルダーで編集する際に対応していません。(UTF対応エディタ対応はしたくないです)そのため、すべてのダウンロードしたファイルをUTF-8からJISに変換するには、TaraPadか何かで単純に文字コードJISにコピペで保存すれば、良いのでしょうか?最終的にはFTPで転送するのでEUC対応になると思いますが教えて下さい。

    • 締切済み
    • PHP
  • UTF-8で書かれたファイルをshift-jisに変換したい

    あるフォルダの下にある複数のファイル(文字コード:UTF-8)を、shift-jisに変換するおすすめツールがありましたら教えてください。

  • UTF8のページでIEがシフトJISを選んでしまうことがある

    PHPの出力をUTF8に変更しました。 ところがUTF8の指定を無視してシフトJISがブラウザで選択されてしまうことがあります。 php.ini の設定を変更。 ファイルを UTF8で保存。 ヘッダーを content='text/html;charset=utf-8 と指定。 としてあります。 なぜブラウザがシフトJISを選択してしまうことがあるのでしょうか? どのあたりの設定を直せばよいのかわかりません。 ご存知の方がいましたら教えてください。

    • ベストアンサー
    • PHP
  • shift-jisをUTF-8に読み込ませるには?

    shift-jisにてcsv形式で保存しているテキストファイルの配列(カンマ区切りの3番目)から取り出したものをUTF-8にエンコードする方法をご教示賜りたくご質問させて頂きました。 $Pscrtfl = "./datas/pdtscrt.txt"; open (DT,"<$Pscrtfl"); @Pscrt = <DT>; close (DT); foreach $i (@Pscrt){ @iW = split(/\,/,$i); $Pscrtfl = "./datas/pdtscrt.txt のtxtに入ってる3番目のデータを取り出して、それをUTF-8文字コードに 変換して出力させたいと思っております。 現在のところ私のやってみたこと foreach(@Pscrt){ use Encode; Encode::from_to( $_, 'utf8', 'shiftjis' ); $Pscrtfl .= $_; } とエンコードかけてみるんですが。。。。やはりcsvファイルの文字がUTF-8に変更していないのか、 <!doctype html> <html><head><meta charset="UTF-8">でprintしようとすると、やはり文字化けしてしまいます。 これを文字化けしない方法がお分かりの方おられましたら、ぜひご教示下さいませ。

    • ベストアンサー
    • Perl
  • UTF8への変換について

    XMLをシフトJISで、作成しています。 このXMLから、XSLTを通して、UTF-8のHTMLを作成することは、 可能でしょうか? XSLTで、文字コードの変更は出来るのでしょうか? やはり、シフトJISのHTMLを作成した後で、UTF-8に変換する方法でしょうか?

    • ベストアンサー
    • XML
  • shift-jisからutf8に変換

    解決に至らなかったので再度お尋ねします。 CGIのコードを見てくださいますか。 http://hotpegasus.bov.jp/mail.txt (必要な部分だけ表示しておりますので、そのままアップしても機能はしません) 改修した箇所は以下のです。 <meta http-equiv="Content-Type" content="text/html;charset=shift_jis"> &jcode'h2z_sjis(*contenido) &jcode'convert(*subject,'sjis'); &jcode'convert(*infor,'sjis'); &jcode'convert(*contenido,'jis'); &jcode'convert(*res_msg,'jis'); print "Content-type: text/html;charset=shift_jis\n\n"; ↓ sjis関連をutf8に書き換え、jcodeの頭文字をJに書き換え <meta http-equiv="Content-Type" content="text/html;charset=utf8"> &Jcode'h2z_utf8(*contenido) &Jcode'convert(*subject,'utf8'); &Jcode'convert(*infor,'utf8'); &Jcode'convert(*contenido,'utf8'); &Jcode'convert(*res_msg,'utf8'); print "Content-type: text/html;charset=shift_utf8\n\n"; require 'jcode.pl'をuse Jcode;に書き換え ※jcode::" となっている箇所はありません 結果 メールフォームはエラーや文字化けは出なくて成功しましたが、メール受信の際、ThunderbirdPortableメーラーでは全て文字化け(文字エンコーディングは「日本語ISO-2022jp」となっています)、ウェブメールのgmailでは内容は文字化けになっていませんが、タイトルが文字化けになっています。 どこが悪かったのでしょうか? 宜しくお願いします。

    • 締切済み
    • CGI
  • ファイルダウンロード時、正常終了しなかった場合にエラー表示させたい

    Perlを使用し、CSVファイルをダウンロードさせるスクリプトを作りました。 データが大きくなると、回線状況などの問題により、データを全てダウンロード しないままダウンロードが完了してしまう時があるようです。 自分の環境では再現できなかったのですが、途中までしかダウンロードできていないにもかかわらず、正常終了したような顔しているそうです。 全てダウンロードできなかった場合に、ユーザーに対して何かエラーを表示させることはできないでしょうか? print"Content-Type: text/csv\n"; print"Content-Disposition: attachment; filename=register.csv\n\n"; foreach (@data){     print"$_\n"; }

    • ベストアンサー
    • Perl
  • 文字コードを相互変換するには?(JIS,SJIS,EUC,UTF-8,UTF-16,Unicode)

    現在、文字コード一覧を JavaScript を使って動的にリストを作成する事を行っています。 そこで質問します。 『JavaScript』では文字コードの相互変換する方法はありますか? ある場合は関数、メソッドとその使い方を簡単でいいので教えて下さい。 もし標準では出来ない場合は、どのようにすれば相互変換できるのかその方法を教えて下さい。 ●相互変換コード シフトJISコード←→JISコード シフトJISコード←→EUCコード シフトJISコード←→UTF-8 シフトJISコード←→UTF-16 シフトJISコード←→Unicode 最終的に上記の相互変換を考えています。 変換を繰り返すことで実現できると思っています。 以上。相互変換の方法をお願いします。→JavaScript 歴1.5ヵ月です。

専門家に質問してみよう