- PR -

ファイルダウンロード時のファイル名文字化けについて

1
投稿者投稿内容
やすけ
ベテラン
会議室デビュー日: 2003/08/20
投稿数: 87
投稿日時: 2007-08-16 11:38
nakamuraと申します。 Perlの投稿先がここでいいのか、迷いましたが(最初はInsider.NETで投稿しました)
 あるwebページ上のリンクからファイルをクライアント側にてダウンロードするプログラムを作成しました。リンクからcgi(Perl)を起動してそのcgiからファイルダウンロードを実行します。cgiを起動する際、日本語ファイル名(euc)を渡して、それをcgiよりsjisにコンバートしてからダウンロードを実行させています。ある特定の文字だけ文字化けする現象が発覚しました。ある特定の文字とは、ラリルレロワヲン
です。このどれかが一つでも入っているとファイル名が文字化けしてしまいます。他にもあるかもしれませんが、自分が見つけたのはこの文字です。
 ちなみに、リンクを右クリックで、対象をファイルに保存だと、ファイル名は文字化けしません。
 色々ネットで調べたのですが、対応方法がとんとわかりませんでした。ASP、java等の対応方法はいくらでもあるのですが、cgi(Perl)の対応方法が見つかりません。
どなたかご存知の方いらっしゃいますでしょうか。
ちなみに
サーバ側
OS:Red Hat Enterprise Linux ES release 4 (Nahant Update 4)
cgi:不明
クライアント側IE:6.0SP2
念のため下記にコードを記します。
#!/usr/local/bin/perl
require '../cgi-lib.pl';
require '../jcode.pl';
# 入力データを連想配列に読み込む
&ReadParse(*in);
# パラメータを変数に代入する。
#日本語ファイル名
$OriginalFileName = $in{'OriginalFileName'};
#ファイル保管ディレクトリの絶対パス
$FileStoragePath = '/html/file/';

# 日本語文字列の編集(ダウンロードファイル名をShift-JISへ変換)
&jcode'convert(*OriginalFileName, 'sjis');

# ファイル出力処理実行
&outputFile();
exit(0);

sub outputFile
{
$FHND = "<$FileStoragePath/$FileName";
if (open FHND) {
print ("Content-type: Application/octet-stream\n");
# print ("Content-Disposition: attachment; filename=\"download_$FileName\"\n\n");
print ("Content-Disposition: inline; filename=\"$OriginalFileName\"\n\n");
while (<FHND>) {
print $_;
}
close FHND;
} else {
&outputErrHtml("ファイル読み込みに失敗しました。");
exit(0);
}
}
sub outputErrHtml
{
〜エラー表示のためのhtml表示〜
}
BackDoor
ぬし
会議室デビュー日: 2006/02/20
投稿数: 831
投稿日時: 2007-08-17 06:13
こんにちは。
Perlはsjisと相性が良くないのでダメ元とお考え下さい。

引用:
やすけさんの書き込み (2007-08-16 11:38) より:

#日本語ファイル名
$OriginalFileName = $in{'OriginalFileName'};
#ファイル保管ディレクトリの絶対パス
$FileStoragePath = '/html/file/';

# 日本語文字列の編集(ダウンロードファイル名をShift-JISへ変換)
&jcode'convert(*OriginalFileName, 'sjis');


ダメ元その1
# 日本語文字列の編集(ダウンロードファイル名をShift-JISへ変換)
&jcode'euc2sjis(*OriginalFileName);

ダメ元その2
こちらの情報 を参照
1

スキルアップ/キャリアアップ(JOB@IT)