Internet Explorerでファイルダウンロード時に発生する問題の対策

2010-04-24 13:45  •  分類:

本対策はRedmine 1.x向けです。Redmine 2.0以降では利用できません。また、本文中で挙げている「リポジトリ内のファイルをダウンロードする際にファイル名が文字化け」はRedmine 1.1.2で修正されており独自の対策は不要です。

チケット、文書、Wikiなどで添付されたファイルをダウンロードする際、日本語環境で実行されているInternet Explorerではファイル名の文字化けなどの問題が発生することがあります。この問題を解決するためのパッチを公開します。

発生する問題

1. リポジトリ内のファイルをダウンロードする際にファイル名が文字化け

この問題はRedmine 1.1.2で修正されました(#7288)。パッチ適用等の対策は不要です。

リポジトリ画面でファイルをダウンロードしようとすると、ファイル名の日本語部分が文字化けします。

この問題はリポジトリ画面のみで発生します。チケット、文書、Wikiなどの添付ファイルでは発生しません。

2. 添付ファイルのダウンロード時にファイル名が切れる

チケット、文書、Wikiなどの添付ファイルをダウンロードする際に、ファイル名が日本語かつ文字数が多いとファイル名の一部が切れます。

Internet Explorer 8ではこの問題は発生しません。旧バージョンのIEで発生するようです。IE 6では起こることを確認しました。

原因

日本語環境のOS上で動作するIntenet Explorerは、HTTPレスポンスヘッダ内のContent-Dispositionフィールドでサーバから送出されるファイル名がShift_JISでエンコードされているものとして扱います。しかしRedmineはファイル名をUTF-8でエンコードしているため、文字化けが発生してしまいます。リポジトリ画面で発生する文字化けはこれに該当します。

ファイル名がUTF-8でエンコードされていても、それをさらにURLエンコードすると問題を緩和することができますが、特定の条件でファイル名が短く切られたり文字化けしたりします。添付ファイルのダウンロード時に発生する問題がこれに該当します。

参考:
ファイルをダウンロードする ASP.NET Web ページで日本語ファイル名が文字化けする (マイクロソフト)

対策

Internet Explorerからのアクセスで、かつ日本語環境で利用されている可能性が高い場合に、ファイル名をShift_JISに変換するようなパッチを作成しました。これにより問題がほぼ解決します。

ただし、Internet Explorerを実行しているOSが日本語環境かどうかはサーバから判断することができません。そこで、IEから送出されるHTTPリクエストヘッダ内のAccept-Languageフィールド(優先する言語)の先頭が"ja"(日本語)である場合に日本語環境であると判断し、ファイル名をShift_JISに変換しています。

なお、このパッチは、Redmineに対するパッチではなくRedmineが使用しているwebアプリケーションフレームワークであるRuby on Railsに対するパッチです。Redmineだけではなく、Ruby on Railsで開発された他のアプリケーションでも有効であるはずです。

パッチの動作環境

Redmine 0.9(+Ruby on Rails 2.3.5)で動作確認しました。

インストール方法

1. 修正ファイルのダウンロード

farend_ie_ja_filename_fix.rb

2. 修正ファイルのコピー

ダウンロードしたファイルを、Redmineのインストールディレクトリの config/initializers/ 以下にコピーしてください。

3. Redmine再起動

Redmineを再起動してください。修正ファイルによりRuby on Railsにパッチが適用され、問題が解決します。

作成: 2010-04-24 13:45  •  分類: