- PR -

サーブレットにおけるダウンロードファイルの文字化けについて

投稿者投稿内容
おじゃるまる
会議室デビュー日: 2001/12/11
投稿数: 17
投稿日時: 2002-10-07 12:28
いつもお世話になっております。
現在、サーブレットでCSVファイルを生成し、クライアントのブラウザにてダウンロードをさせようとこころみているのですが、その際に表示されるファイルの保存ダイアログに表示されるデフォルトのファイル名が化けてしまいます。
いろいろなサイトで同様な問題で苦しんでいる方への参考に、いろいろ試してみたのですが、
どれもうまくいきませんでした。

ちなみに、

response.setContentType("contents=text/csv");
String fileName1 = "テスト用ファイル名.demo";
String fileName = "";

try {
fileName = new String(fileName1.getBytes("Shift_JIS"), "ISO8859_1");
}catch(java.io.UnsupportedEncodingException e) {}

response.setHeader("Content-Disposition", "filename=\"" + fileName + "\"");

のようにコーディングしています。
他のサイトでは、このような問題が発生した方が投稿された時に、上記のようなコーディングで
うまくいったと書いてありました。

System.out.prinln()にて標準出力を行ったところ、
?e?X?g?p?t?@?C????.demo
のように表示されています。
これは、UNIXがEUC-JPでの文字コードに対して、Shift_JISの文字コードの文字を表示した為
だと思います。

また、ファイルの保存ダイアログには、
CAILELIN.
と表示されます。

いろいろなサイトを見てて思ったのですが、
ブラウザの種類、バージョンによっても動作が異なるような事が書いてあったのですが、
このような問題なんでしょうか?
あいにく、現在客先にて作業を行っているので、安易に他のブラウザにて実験してみることも
できずに困っております。

どなたか、似たような状況で打開された方、もしくは、根本的に私の考え方が間違ってると気付かれた方、ご意見お願いできないでしょうか?


環境は
サーバ:UNIX(SunOS 5.8)
webサーバ:apache
サーブレットコンテナ:TOMCAT
(apache、TOMCATともにバージョンまでは把握できませんでした。でも、最新のバージョンだと思います。)
ブラウザ:IE 5.0
tasuku
常連さん
会議室デビュー日: 2001/08/11
投稿数: 28
投稿日時: 2002-10-07 12:36
記憶だけで言ってますので、もしウソだったらご勘弁。

確か、その部分では日本語を指定する場合の規格が
まだ存在していないハズです。
(メールのタイトルに日本語を使用する場合はエンコード
 しますよね。 あれに当たるものです。)

従って、どうやると上手く渡るか?
というのはBrowser依存(場合によっては更にVersion依存)
になってしまうハズです。
gsg
常連さん
会議室デビュー日: 2002/08/09
投稿数: 20
お住まい・勤務地: 東京都
投稿日時: 2002-10-07 12:42
私が同じような問題にぶつかった際は、ブラウザではなくてWebサーバを
変更したらうまくいった記憶があります。確か、Apacheでどうにか
したような・・・(曖昧な記憶ですいません)

どちらにせよ、tasukuさんがおっしゃるように、半角文字のみを
想定した仕様らしいので、できれば全角は避けたほうがよいのではないかと
思います。もっとも、必要だから困っていらっしゃるのでしょうが。
おじゃるまる
会議室デビュー日: 2001/12/11
投稿数: 17
投稿日時: 2002-10-07 12:51
tasukuさん、gsgさん、早速のご意見ありがとうございます。

他の掲示板を見た際には、そのようなブラウザ依存のような事は、ちょこっと触れている程度で
重要な問題のようには取り扱われていませんでした。
現在、ターゲットとなるブラウザはIEの5.0以上という制限のみで、
もしかしたら、IEの5.0ではうまくいった(方法はまだわかりませんが・・・)としても、
他のバージョンではうまくいかない可能性があると言うことですよね。
となると、ファイル名を日本語にするだけで、いろいろ制約ができてしまうわけですよ
ね。


そうなると、全角文字のファイル名にこだわって時間を費やすより、半角のファイル名に
にて開発を進めた方が無難なんでしょうか?


酢味噌
会議室デビュー日: 2002/10/01
投稿数: 10
投稿日時: 2002-10-07 13:17
便乗質問させていただいてよろしいでしょうか?
私もおじゃるまるさんと同じ処理を行っています。
デフォルトのファイル名については日本語を使っていないので特に問題ないのですが、
問題はダウンロードするファイルのサイズによってそのファイルの保存ダイアログが出ないまま処理が終了してしまいます。
方々を探して回ったのですがなかなかよい答えが見つからずここに来ました。
よい解決策があったら是非教えていただきたいのですが。
おじゃるまる
会議室デビュー日: 2001/12/11
投稿数: 17
投稿日時: 2002-10-07 13:55
tasukuさん、gsgさん、いろいろありがとうございました。
結局、日本語名はあきらめ、半角英数字にすることにしました。

今更なんですが、
そう言えば、ダウンロードサイトも、日本語名のファイル名は見かけないな〜と思いました。

>ダウンロードするファイルのサイズによってそのファイルの保存ダイアログが出ないまま処理
>が終了してしまいます。
酢味噌さんの件ですが、そんな事があるんですか?
今の所、私の方では起こっておりません。
ダウンロードするファイルは、そのつど生成しておりますので、サイズは不定です。
すみません。解決できなくて。
酢味噌
会議室デビュー日: 2002/10/01
投稿数: 10
投稿日時: 2002-10-07 15:25
>>おじゃるまる様

私の処理はDBのデータをBeanで取得後、CSV編集をしてサーバに置き、それをクライアント側にダウンロードさせるというものです。
サーバにデータを置く所まではうまくいっているのですが、最後のダウンロードだけが
うまくいかないのです。

納期が再来週と迫ってきているので取り急ぎ解決したいのですが、よいアドバイス等ございましたらお願いいたします。
gsg
常連さん
会議室デビュー日: 2002/08/09
投稿数: 20
お住まい・勤務地: 東京都
投稿日時: 2002-10-07 16:27
引用:

デフォルトのファイル名については日本語を使っていないので特に問題ないのですが、
問題はダウンロードするファイルのサイズによってそのファイルの保存ダイアログが出ないまま処理が終了してしまいます。



この、「処理が終了しない」の内容ですが、サーバが返事を返さない、
ということでよいのでしょうか。ブラウザはなんというエラーを返していますか?

処理時間が余りに長い場合は、ブラウザが待ちきれずに接続をあきらめてしまう
場合があります。ファイルが大きすぎるか、あるいはDBからの情報取得に
時間がかかりすぎているかで、ブラウザの限界よりの長い時間が経過している
ような気がしますが、どうでしょう。

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