- - PR -
ファイルダウンロード時、特殊文字文字化け問題
1
投稿者 | 投稿内容 | ||||
---|---|---|---|---|---|
|
投稿日時: 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); 特殊文字ない場合は、正常にダウンロードできます。 特殊文字(〜など)がある場合には、どうすればいいですか。 教えていただきませんか。 | ||||
|
投稿日時: 2007-04-10 17:37
"ファイル ダウンロード 文字化け"とかで検索してみてはいかがでしょう。
| ||||
|
投稿日時: 2007-04-10 17:46
「〜」などに限定した文字化けというと、
Shift_JIS と MS932 (Windows31J) 間での文字化けのような気がしますが。 | ||||
|
投稿日時: 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); この方法は、ファイル名は";"などがあると、ファイル種類不明になる とりあえず、文字化けの問題を解決しそうですが、完璧な方法がないでしょうか。 | ||||
|
投稿日時: 2007-04-11 16:15
このあたりのプロトコルは制定が古いのもあり 文字コードに対する配慮が弱い感がありますね。 また、一応の方法論が制定されているとしても実装側、つまりブラウザが まちまちな実装をしていたりしますので「完璧」な方法論はないと思います。 個別のブラウザの挙動にあわせて個別に対応するより仕方ないのではないでしょうか。 ブラウザの判別自体がそもそも安定的ではないですが… |
1