- PR -

ファイルダウンロード時、特殊文字文字化け問題

1
投稿者投稿内容
youyou
会議室デビュー日: 2007/04/10
投稿数: 11
投稿日時: 2007-04-10 17:07
ファイルダウンロードの件で、ファイル名は特殊文字(〜など)を含むと、文字化け発生します。
fileName = new String(fileName.getBytes("SHIFT_JIS"), "ISO-8859-1");
// HTTPのヘッダのセット
res.setHeader("Content-Type", "charset=SHIFT_JIS");
res.setHeader("Content-Disposition", "attachment; filename=" + fileName);

特殊文字ない場合は、正常にダウンロードできます。
特殊文字(〜など)がある場合には、どうすればいいですか。
教えていただきませんか。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2007-04-10 17:37
"ファイル ダウンロード 文字化け"とかで検索してみてはいかがでしょう。
nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-10 17:46
「〜」などに限定した文字化けというと、
Shift_JIS と MS932 (Windows31J) 間での文字化けのような気がしますが。
youyou
会議室デビュー日: 2007/04/10
投稿数: 11
投稿日時: 2007-04-10 19:12
ご回答ありがとうございました。
みんなのおかげで、いくつの方法が見つかった。
1.
fileName = java.net.URLEncoder.encode(fileName, "UTF-8");
// ファイル名中にスペースがあると、スペース部分が"+"に変換されたので、スペースに変換返す
fileName = fileName.replaceAll("\\+", " ");
// HTTPのヘッダのセット
res.setHeader("Content-Type", "charset=UTF-8");
res.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
でも、この方法は、ファイル名が長い場合には、ファイル名が間違ったことがある。
2.
fileName = new String(fileName.getBytes("Windows-31J"), "ISO-8859-1");
// HTTPのヘッダのセット
res.setHeader("Content-Type", "charset=UTF-8");
res.setHeader("Content-Disposition", "attachment; filename=" + fileName);
この方法は、ファイル名は";"などがあると、ファイル種類不明になる

とりあえず、文字化けの問題を解決しそうですが、完璧な方法がないでしょうか。


nagise
ぬし
会議室デビュー日: 2006/05/19
投稿数: 1141
投稿日時: 2007-04-11 16:15
引用:

youyouさんの書き込み (2007-04-10 19:12) より:
とりあえず、文字化けの問題を解決しそうですが、完璧な方法がないでしょうか。



このあたりのプロトコルは制定が古いのもあり
文字コードに対する配慮が弱い感がありますね。

また、一応の方法論が制定されているとしても実装側、つまりブラウザが
まちまちな実装をしていたりしますので「完璧」な方法論はないと思います。
個別のブラウザの挙動にあわせて個別に対応するより仕方ないのではないでしょうか。
ブラウザの判別自体がそもそも安定的ではないですが…
1

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