none
画像を保存するときにファイル名が日本語のときに拡張子がbmpになる RRS feed

  • 質問

  • web上の画像を右クリックメニューの「名前を付けて画像を保存」するときの「ファイルの種類」が、
    ページを開いた直後は[jpeg]で保存できるのに、しばらく放置すると[ビットマップ]になってしまいます。
    ファイル名も[ビットマップ]の場合全て[無題](英語版IEはuntitled)になります。
    imgタグのsrc属性内のファイル名部分に日本語を指定しています。
    確認したファイル名は"あ.jpg"です。

    使用した環境は以下です。
    OS: WindowsXP SP2
    ブラウザ:IE6 SP2

    以下にある、過去ログやMSDNを参考にして、
    Cookieやインターネット一時ファイルを削除し、IEやOSの再起動を
    行いましたが、ダウンロードするファイルが日本語である場合には、BMPになっていしまいます。
    (ファイル名が英字のみで構成されている場合(a.gifなど)は再現しません)
    インターネット一時ファイルのディレクトリを変更し、再起動も行いましたが、変わりませんでした。

    画像を保存するときの拡張子が変化する
    http://social.technet.microsoft.com/forums/ja-JP/internetexplorerja/thread/b6f83d17-0ce5-4f00-9312-661b64687b16/

    Internet Explorer でグラフィック データ ファイルが適切な形式で保存されない
    http://support.microsoft.com/kb/260650/ja
     
    Internet Explorer で画像がビットマップ (.bmp ファイル) として保存される
    http://support.microsoft.com/kb/810978/ja

    また、ここで聞いていいのか分かりませんが、同様の現象が、
    WindowsMobile6.1.4のシミュレータでも発生します。
    WindowsMobile6.1.0の時はエラー現象は「保存できません」というダイアログ
    が出ていました。
    (6.1.0の場合はおそらく条件は同じで事象が異なっているだけではないかと思っています)

    プロトコルはHTTPでもHTTPSでも発生します。
    まったく同じ画像をファイル名だけ日本語にすると発生します。
    使用した画像はOSインストール時に入っていた"Blue hills.jpg"です。
    それ以外の複数の画像でも再現しています。(確認したのはjpgとgifのみですが)

    念のため、画像を表示しているHTMLの頭部分を貼り付けると以下です。

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    (中略)
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
    (後略)

    日本語ファイルなので、imgタグのsrc部分をURLエンコードする対処を考えましたが、
    画像は表示されますが、「名前を付けて画像を保存」するとURLエンコードされたままで表示されてしまいます。
    (UTF8の文字コードでURLエンコードになります)
    (拡張子はちゃんとjpegになってくれます)
    (Safariなど他のブラウザはURLデコードしてくれますが、IE6はしてくれないようです)
    IE7やIE8は未確認です。

    「名前を付けて画像を保存」するときに日本語ファイル名のままで拡張子もそのままで
    保存したいと考えています。
    何か方法はありますでしょうか?

    2009年5月11日 9:03

すべての返信

  • 追加で分かったことと、曖昧な記述の補足と訂正をします。

    以下の環境でも再現しました。(マシンが変わっています)
    OS: WindowsXP SP3
    ブラウザ: IE8 (8.0.6001.18702)

    >ページを開いた直後は[jpeg]で保存できるのに、しばらく放置すると[ビットマップ]になってしまいます。
    ページを開いた直後で[jpeg]で保存出来たことは2回だけで、
    同じように、ページを開いた直後でも[bmp]になる方がほとんどです。
    (なので、jpegになる方の再現手順が間違ったんじゃないかと疑っています)

    >(Safariなど他のブラウザはURLデコードしてくれますが、IE6はしてくれないようです)
    Safariではなく、FireFoxの間違いでした。Win版Safari3.2ではURLデコードはされませんでした。

    >確認したファイル名は"あ.jpg"です。
    HTMLのタグの記載は
    <img src="./あ.jpg">です。
    上記の「あ」の部分はUTF8です。

    あと、インターネット一時領域のサイズは特にいじっておらず、252MBになっています。
    また、HDDのサイズも十分に空いています。
    ファイル名は上記のとおり複数のピリオドは含まれていません。

    ファイルを保存するときに拡張子を手動で.jpgにしてみましたが、
    中身がbmpなjpgが出来てしまうだけでした。

    同様の現象に当たった方が以下のMSN質問箱にもありましたが、
    解決方法は見つからなかったようです。
    http://questionbox.jp.msn.com/qa4004835.html

    以上、よろしくお願いします。

    2009年5月12日 15:43
  • msgbox wscript.arguments(0)
    とメモ帳で書いて、hoge.vbsという名前で保存。
    画像の上で右クリックして「コピー」。
    hoge.vbsを右クリックして「貼り付け」すると、どのように表示されます?
    2009年5月14日 13:54
  • 残念ながらhoge.vbsを右クリックしても、「貼り付け」メニューがメニュー内に存在しませんでした。

    さっそくclipbrd.exeを起動し、クリップボードの内容を確認したところ、
    英字のみのファイルを右クリック「コピー」したときは、
    クリップボード内に
    「DIBビットマップ」「ビットマップ」「ドラッグアンドドロップデータ」
    がありますが、
    日本語ファイルのみのものを右クリック「コピー」したときは、
    「DIBビットマップ」「ビットマップ」
    の2つのみでした。

    なお、ファイルの本体が本当にbmpファイルの場合は、クリップボード内には
    「DIBビットマップ」「ビットマップ」「ドラッグアンドドロップデータ」
    が入ります。

    「ドラッグアンドドロップデータ」が*.vbs右クリック時に出てくるメニューあるかどうかチェックしてるんでしょうかね。

    となると、現在のところ
    ・クリップボード内のフォーマットが「ドラッグアンドドロップデータ」が入る条件
    ・拡張子がJPEGだったものがBMPになる条件
    が一致していますね。
    2009年5月14日 15:59
  • >残念ながらhoge.vbsを右クリックしても、「貼り付け」メニューがメニュー内に存在しませんでした。
    これは、OS標準の右クリックメニュー内に「貼り付け」が出なかったということです。
    ただし、英字のみのJPEGや、英字のみのBMPファイルではOS標準の右クリックメニュー内に「貼り付け」が出ます。

    >・クリップボード内のフォーマットが「ドラッグアンドドロップデータ」が入る条件
    ・クリップボード内のフォーマットが「ドラッグアンドドロップデータ」が入らない条件
    の間違いでした。

    とにかく、何らかの関連がありそうだと思っています。

    #IE6のときに、デバッガ使ってIE内部のメモリを追っかけたことがあるのですが、
    #JPEGを無圧縮のBMPで持ったままだったことを思い出す。。。
    2009年5月14日 16:12
  • >hoge.vbsを右クリックして「貼り付け」すると、どのように表示されます?

    ・英字のみ画像場合
    C:\Documents and Settings\xxxxx\Local Settings\Temporary Internet Files\Content.IE5\0MK86RQK\eiji[1].gif
    (xxxxはユーザ名)

    ・日本語を含む画像の場合
    (´・ω・`)さんと同様の現象でした。

    Content.IE5は知らなかったのですが、
    その中を見てみると、
    日本語が含まれた画像についてもそこに存在していました。
    「あ[1].jpg」という名前で、なんと、JPEGで存在しています。
    にもかかわらず、右クリックの「名前を付けて画像を保存」ではBMPでしか保存できませんでした。

    ページを表示するとがContent.IE5内の「あ[1].jpg」が作成され、
    メニューからインターネット一時ファイルの削除を選ぶとContent.IE5内の「あ[1].jpg」は消えます。

    IE8の新機能であるInPrivate Browsing 機能がONであっても、上記は同様です。
    (ブラウザを閉じるだけで、Content.IE5内のファイルが自動で削除されてるように動作が変わりました。)

    分かってたことですが、OSがWindows7 RC1でも同様でしたね。
    つまり、Content.IE5内にjpgで保持されているにも関わらず、名前を付けてファイルを保存するとBMPになるし、
    InPrivate Browsing 機能がONなら、ブラウザを閉じるとファイルが消えます。

    以前にURLエンコードする対処を書きましたが、IE8はIE6と違って、
    <img src="%E3%81%82.jpg">のようにURLエンコードしてやると
    「名前を付けて画像を保存」すると「あ_1_~1.JPG」という名前で保存されるようになっていました。
    なので、この点は変更されたように思えます。
    1_~1ってものがファイル名末尾に付く理由は何なのでしょうか!?

    なんとなくIE標準の右クリックメニューの「名前を付けて画像を保存」時に
    jpegで日本語ファイル名で保存出来る方法は存在しないのではないかと思ったのですが、
    いかがでしょうか。

    以上、よろしくお願いします。

    2009年5月15日 16:36
  • C:\Documents and Settings\xxxxx\Local Settings\Temporary Internet Files\
    を開くと、名前順で最後の方に「あ.jpg」があると思います。
    右クリック「プロパティ」を見ると、キャッシュ名「あ[1].jpg」になってます。
    右クリック「コピー」して、どこかフォルダに「張り付け」ると、「あ[1].jpg」ができます。

    「あ[1].jpg」は長いファイル名で、その短いファイル名が「あ_1_~1.JPG」です。
    なぜ短いファイル名に変わるのかは分かりません。
    なぜか上のキャッシュ名が短いファイル名になっているケースもあります。

    ところで、MSDNライブラリdexplore.exeでの画像も同じ状況です。
    こちらは英字のファイル名ですが。
    そこで推理ですが、
    <img src=のurlはms-help:~なのに、キャッシュではms-itss:~になってます。
    urlが変換されると、対応が取れなくなるのかも。
    日本語ファイル名もurl encodeされて、対応が取れなくなるのでは。

    2009年5月16日 15:09
  • 誤解を与えてしまったようです。
    IE8かつURLエンコード時にはURLデコードされるように治っていたということです。
    (IE6のときからJpegで出ていたので、おもな問題は修正されたという認識です)
    (ブラウザ互換の観点からimgのsrc属性にURLエンコードする対処が良いかは疑問ですが)

    IEのキャッシュはいくつか紐付けされており、
    途中で途切れたりした場合に、正しいファイル名・拡張子で保存出来ないようだというのは了解しました。

    英字のみのファイルで、いったんjpegで保存できるのを確認した後、
    インターネットオプションからIEのキャッシュを消すと、拡張子がbmpのみでしか
    保存出来ないことを確認しました。

    よって、「名前を付けて画像を保存」時はブラウザ内でキャッシュの有無をチェックして、キャッシュに無ければBMPのみでしか保存不可
    という動きをしているのではないかと推測しています。
    なので、IE6では日本語のときに保存するときのファイル名(「キャッシュ名」といった方が良いかもしれない)と
    「名前を付けて画像を保存」や「コピー」と言った操作時に使用する「キャッシュ名」が英字以外の文字に未対応の処理になってしまっているのではないかと。

    メインターゲットとしていたブラウザが、WindowsMobile6.1.4だったのでほぼ同じ動作をするIE6,7での動作の調査をしていました。
    # 他の方法も含め、日本語ファイルの保存はなかなかうまくいかない感じですね。

    少し待って、特に何もなければ閉じておいて問題ありません。
    2009年5月19日 17:33
  • src=あ.jpgの場合、
    C:\Documents and Settings\xxxxx\Local Settings\Temporary Internet Files\
    の詳細表示で「あ.jpg」のインターネットアドレス欄はurlエンコードされてるのでは?
    h ttp://.../あ.jpgで探すと、h ttp://.../%E3%81%82.jpgなので見つからないのだろうと。
    → そういうことはないですね。「名前を付けて画像を保存」はシフトJISでurlエンコードして探すのかも。
    src=%E3%81%82.jpgの場合はh ttp://.../%E3%81%82.jpgで探すので見つかる。

    で、対処法ですが、
    もし、src=urlエンコードされたファイル名.jpgがurlエンコードされたファイル名[n].jpgで保存されるケースは、保存後、ファイル名をwshスクリプトでurlデコードするという方法もありますが、一般向きではないですね。

    それより、<img src=あ.jpg><a href=あ.jpg>あ</a>か<a href=あ.jpg>あ<img src=あ.jpg></a>にして「名前を付けて画像を保存」でなく「対象をファイルに保存」するというのはどうでしょうね?

    2009年5月20日 6:28
  • >詳細表示で「あ.jpg」のインターネットアドレス欄
    こちらでも「C:\Documents and Settings\xxxxx\Local Settings\Temporary Internet Files\」内では
    「あ.jpg」のまま保存されており、「インターネットアドレス」欄についても「あ.jpg」のままでした。

    >「名前を付けて画像を保存」はシフトJISでurlエンコードして探すのかも。
    そう思い、HTMLのcharsetがShiftJISにしたり、サーバを変更などして、
    シフトJISでURLエンコードされたもの(%82%A0.jpg)をキャッシュに載せるようにした後に、
    元の画面(img src=あ.jpg でUTF8)を表示させてみましたが、事態は変わりませんでした。
    (ただ、条件がほんとに正しく設定出来ていたかの確認は甘いですが)

    あと、対処法について、色々考えてくださって大変ありがたいのですが、
    ここでは右クリックメニューの「名前を付けて画像を保存」時の動作の話のみとさせて下さい。
    2009年5月21日 17:30
  • index.datを見ると、utf-8でencodeされてました。
    ということは、shift_jisでencodeして探しているのかも。
    「UTF-8のURLを送信する」のチェックを外すとよいのかも。
    2009年5月24日 7:52