- PR -

ファイルダウンロード時の文字コード

投稿者投稿内容
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2009-02-06 19:20
度々失礼します。

現在、Safari3.1.2で確認しているのですが、日本語ファイル名だと文字化けを起こします。
一応、クロスブラウザ対応で、IE6以上、FF3以上、Chrome0.3で確認していますが、SafairおよびFFで日本語名は文字化けを起こします。

Tomcat6を使っていますが、エンコードはUTF-8で指定しています。
String zipname = URLEncoder.encode("あああ", "Shift_JIS");

このようにShift-JIS & UTF-8でも試してみましたが、だめでした。
この場合どのように対応すればよいのでしょうか?

ちなみに、DLファイルはストリームで返してます。
よろしくお願いします。
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2009-02-06 20:44
私が調べた限りでは、Safariは今のところ非ASCIIのファイル名を正しく伝えることは不可能です。

Firefoxでは、UTF-8をMIMEのBエンコーディングにすればOKだったと思います。
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2009-02-09 09:48
ありがとうございます。

今、DLさせる時、window.openで実行しstreamで返してます。
これがいけないのでしょうか?

例えば、必ずファイルを呼び出し、そこでこれら(日本語)の文字列を取得し、
セットすれば良いのでしょうか?

Safariでも普通の画面遷移でデータの文字化けは起こっていないのですが・・。
何か良い解決策は無いでしょうか?
スフレ
ぬし
会議室デビュー日: 2005/05/27
投稿数: 281
お住まい・勤務地: 東京
投稿日時: 2009-02-09 11:09
引用:

今、DLさせる時、window.openで実行しstreamで返してます。
これがいけないのでしょうか?

例えば、必ずファイルを呼び出し、そこでこれら(日本語)の文字列を取得し、
セットすれば良いのでしょうか?



それらは関係ありません。

私ももう一度ぐぐって調べてみました。

  • Content-Dispositionヘッダにファイル名を書く方法では、やはり不可能。Safariのバグが直るのを待つしかない。
  • URLの最後にURLエンコードしたファイル名を入れればできる。

だそうです。
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2009-02-09 18:05
ありがとうございます。

望みを託し、教えていただいた後者で試してみます。
未記入
大ベテラン
会議室デビュー日: 2008/07/11
投稿数: 182
投稿日時: 2009-02-10 11:45
追記です。

やっぱり、Safari(3.1.2)ではだめでした。
UTF-8で「開く」「保存」「キャンセル」の開くを押すと、
文字化けしない日本語ファイル名になるので、やはり
仲介のSafariがうまく変換できていないように思います。

>スフレさん
ところで、「UTF-8をMIMEのBエンコーディング」とは、
どのように記述するのでしょうか?
contentTypeをこのようにセットしましたが、Bエンコーディングと言うのはぐぐっても見当たらないのですが?PHP独自?
"application/octet-stream; charset=UTF-8";

ご教授お願いできますでしょうか?
冬寂
ぬし
会議室デビュー日: 2002/09/17
投稿数: 449
投稿日時: 2009-02-10 13:30
過去に何度も何度もそれこそ何度も挙がった問題なので、会議室を「日本語ファイル名」で検索すれば色々情報でてきますよ。

とりあえず、過去ログから
http://oku.edu.mie-u.ac.jp/~okumura/php/filename.php
ここらへんのページが分かりやすいのではないでしょうか?

# 要するに、ブラウザによって扱い方が違う、ということ
shimix
ぬし
会議室デビュー日: 2004/08/05
投稿数: 512
お住まい・勤務地: 大分市
投稿日時: 2009-02-10 13:39
引用:

未記入さんの書き込み (2009-02-10 11:45) より:

ところで、「UTF-8をMIMEのBエンコーディング」とは、
どのように記述するのでしょうか?
contentTypeをこのようにセットしましたが、Bエンコーディングと言うのはぐぐっても見当たらないのですが?PHP独自?


ぐぐっても見当たらない?メールヘッダではお馴染みなんですが(メールの添付ファイル名では本来はアウト)。

  http://www.google.co.jp/search?q=B%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0&sourceid=navclient-ff&ie=UTF-8&rlz=1B3GGGL_jaJP251JP251

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