IE11 で User Agent が変わったことはご存知だろう。

Version 7
Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0)

Version 8
Mozilla/5.0 (compatible; MSIE 8.0; Windows NT 6.0; WOW64; Trident/4.0)

Version 9
Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)

Version 10
Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)

Version 11
Mozilla/5.0 (Windows NT 6.3; Trident/7.0; rv:11.0) like Gecko

この通り、 v11 からは「MSIE」の文字列が無くなっている。理由は IEInternals のブログによると:

This string is deliberately designed to cause most UA-string sniffing logic to interpret it either Gecko or WebKit. This design choice was a careful one—the IE team tested many UA string variants to find out which would cause the majority of sites to “just work” for IE11 users.

赤で強調したところだが、「ウェブ標準の準拠において IE11 は Gecko や WebKit と同レベルになった」とマイクロソフトが判断したと受け止められる。

確かに、IE の Acid3 や HTML5 対応のスコアはこのところ順調に改善されてはいる。一方、未だにダウンロードファイル名で UTF が使えないという恥じるべき問題が残っている。

Rails でファイルとしてダウンロードをさせたいデータを送信するときは send_data を使う。

send_data(some_blob, :filename => 'ファイル名.txt')

そして、今までは前述の「MSIE」を目印にブラウザーが IE であれば、ファイル名を Shift_JIS (CP932) に変換していた。

name = '未だにUTFが使えません.txt'
send_data(some_blob, :filename => request.is_msie? ? Iconv.iconv('cp932', 'utf-8', URI.decode(name)) : name)

先日、クライアントから IE11 でファイルをダウンロードすると、ファイル名が文字化けしてしまい、ダブルクリックしても開けないという連絡を受けた。調査すると、User Agent の変更でブラウザーが IE として認識できなかった影響で「.csv」とファイル名の拡張子が「csv」と、ピリオドが中黒に化けたせいで、開けるファイルとして扱われなかったことが原因と分かった。

今回は #is_msie? メソッドを修正することで問題は解決はできたが、Shift_JIS 系でもう一つ愚痴を言わせてもらうと、Excel が未だに Shift_JIS でしないと CSV を開けない問題は何とかならないものか。

コメントを残す