- - PR -
IEにてファイルのダウンロードを行った際の全角文字自動補正について
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2005-03-03 17:58
初めて書き込みさせていただきます。
vbと申します。 現在、VB.NETにて、WEBアプリケーションの開発を行っている者ですが 1点難題を抱えており、皆様のお知恵をお借りできたらと思い書き込み致しました。 問題の概要としましては IEにてファイルのダウンロードを行った際に、長い日本語のファイル名が 自動補正されてしまう症状があり、これを、回避したいと言うものです。 詳細としては 全角16文字を超過するファイル名 12345678901234567.lzh をダウンロードすると、「ファイルのダウンロード」画面に表示される ファイル名が2345678901234567.lzh と言うように、意図的に前が短縮(1が消える)された形式となってしまいます。 また、保存時にファイル名の欄に表示されるファイル名も同様です。 1234567890123456789.lzh では 4567890123456789.lzh となります。 また、全角25文字を超えた場合に、ファイル名が別の物に挿し変わってしまいます。 12345678901234567890123456.lzh のファイルでは、 CAGL2BGX.lzh と言うテンポラリファイル名のような形式に変わります。 環境としては Visual Basic .NET 69516-335-0000007-18951 ブラウザはIE 6.0.2800.1106。xpsp2.040919-1003 となります。 ファイルの送信処理の切り出しとしては以下のコードになります。 Dim fname As String = System.Web.HttpUtility.UrlEncode(ファイル名) Response.ContentType = "application/octet-stream" Response.AddHeader("content-disposition", "attachment; filename=" + fname) Response.WriteFile(ローカルファイルパス) Response.End() Web.configは以下のように定義しております。 <globalization requestEncoding="utf-8" responseEncoding="utf-8" /> 補足として 半角文字のファイル名の場合は、同様のバイト数にしても問題ありませんでした。 そもそも、日本語の長いファイル名を使用するのが悪いのでしょうが 顧客からの強い要望があり、大変悩んでおります。 どなたか、前に同様の症状が発生し、無事解決された方がいましたら ヒントだけでも構いませんので、お教え頂けると、助かります。 どうか宜しくお願い致します。 | ||||||||
|
投稿日時: 2005-03-04 16:35
IEの仕業っぽいです。
インターネットオプションの詳細設定タブの「常に UTF-8として URL を送信する」の チェックを外してみてください。 | ||||||||
|
投稿日時: 2005-03-08 17:13
日本語の長いファイル名、同様の問題に直面しました。
「ASP.NETの仕様ですから、運用で対応して下さい」 と言っても、ユーザが利用するファイル名の大半が日本語かつ長いファイル名 だったら何かしらの策を考えないといけないと思います。 今回の件、http://support.microsoft.com/default.aspx?scid=kb;ja;436616 ここにあるように、UrlEncodeを行ったところで完全に変換できるわけでは ありません。Web.configのresponseEncodingでも解決しません。 以下、私の対応策を書きます。 簡単に言うと、 「ダウンロード用のASPページを介してファイルをダウンロードさせる」です。 ダウンロード用ASP:(.asp) ・Requestのパラメータとしてファイル名を取得 ・取得したファイル名を使ってファイルを読み込む ・ファイルをResponseとして出力する 呼び元のページ:(.aspx) ・ダウンロード用のリンク文字を上記ASPにする ・Requestのパラメータとしてファイル名を設定 ※「ファイルをResponseとして出力する」のところで悩むと思います。 BASP21を利用すれば簡単に解決しますが、 そうでない場合、いろいろと調べる必要があります。 他の解決方法をご存知の方、書込み願います。 [ メッセージ編集済み 編集者: 聖人@SKB 編集日時 2005-03-08 17:15 ] | ||||||||
|
投稿日時: 2005-03-08 17:39
ADODB.Streamを使えば簡単でしょう。 http://support.microsoft.com/default.aspx?scid=kb;ja;276488
http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=12760&forum=7&start=0 質問者はVB.netでCGIプログラムを作成することにより解決したそうです。 [ メッセージ編集済み 編集者: todo 編集日時 2005-03-08 17:40 ] | ||||||||
|
投稿日時: 2005-03-08 18:02
あら、「ADODB.Stream」でましたか。
私はこれに辿りつくまでに結構時間がかかりました。 因みにbasp21を使った例は下記URLを参照するとよいと思います。 http://www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=17526&forum=7 [ メッセージ編集済み 編集者: 聖人@SKB 編集日時 2005-03-08 18:18 ] | ||||||||
|
投稿日時: 2005-03-10 14:07
ども、ぼのぼのです。
自分の投稿にリンク貼られるとちょっと照れますね
同じく。で、途中で他の方法としてこんなのも見つけました。 BASP21は、大量の便利な関数が入ってますが、今回使いたいのはバイナリリーダだけ。それくらいなら自分で作れるな、と。はじめはVBかVC++で作ろうと思ってたんですが、VB.NETで作れたら楽だなーと思って調べてたら見つけました。 |
1