― MozillaZine.jp フォーラムは Mozilla 製品に関する情報交換の場です ―



All times are UTC + 9 hours

新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 
作成者 メッセージ
投稿記事Posted: 2017年6月05日(月) 17:42 
オフライン

登録日時: 2017年6月02日(金) 17:15
記事: 3
お世話になります。

現在Ubuntu版Firefoxを利用しております。(Ubuntu14.04, Firefox53.0.3)
ファイルダウンロード時にファイル名がshift-jisエンコードされた文字列の場合、
ダウンロードしたファイル名が文字化けします。

ページのエンコードとダウンロードファイルのエンコードが共にshift-jisの場合は問題ありませんが、
どうやらページのエンコードがUTF-8でファイル名がshift-jisの場合があるようで、
その場合文字化けが発生します。

参考となるサイトが無く、下記サイトのphpファイルをwebサーバに配置して
意図的に文字化けを発生させております。

https://gist.github.com/sharapeco/8571256

上記テスト用のページを開くと
ページのHTMLはUTF-8指定となっており、FirefoxのテキストエンコーディングはUnicodeと正常に認識しています。
添付ファイル:
コメント: エンコーディング
170605_mojibake2.png
170605_mojibake2.png [ 290.48 KiB | 表示数: 7888 回 ]

この状態でshift-jisエンコードのファイル名のファイルをダウンロードすると添付画像の様に文字化けが起こります。
添付ファイル:
コメント: 文字化けしたファイル
170605_mojibake1.png
170605_mojibake1.png [ 98.98 KiB | 表示数: 7888 回 ]

※Download E:Shift JIS Raw をクリックするとファイル名がshift-jisエンコードのファイルがダウンロードできます。

テキストエンコーディングを日本語(Shift_JIS)に変更するとダウンロードファイルは正常な日本語でダウンロードされます。
当然なのですがテキストエンコーディングを変更しHTMLに日本語が含まれていた場合、HTMLが文字化けします。

shift-jisがLinux環境で文字化けするのは仕方ないとは思っていたのですが、
このページをubuntu版google-chrome、operaで同様にダウンロードを行ったところ文字化けは起こりません。

UTF-8とShift-jisが混在している条件がおかしいことは承知の上ですが、
他のブラウザで可能なことが不可能なためFirefoxのファイル名の扱いに問題があると考えております。

Webサーバ側での対応をすることはできないため、
クライアントサイドでの対策方法があれば教えていただければ幸いです。

よろしくお願いいたします。

_________________
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2017年6月05日(月) 18:42 
オフライン
Moderator

登録日時: 2011年4月06日(水) 10:16
記事: 1905
お住まい: Tokyo
Ubuntu版ではなく、Mozilla公式版ではどうなりますか?

もし、公式版でも同様であれば、ここで対応できますが、Ubuntu版だけでのことの場合は、ここでは対応しかねます。
その場合は、Ubuntu版のサポートへ。

_________________
[Desktop] Windows 10 pro (64bit) / 16GB RAM
Mozilla/5.0 (Windows NT 6.1; rv:53.0) Gecko/20100101 Firefox/53.0

通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2017年6月05日(月) 19:20 
オフライン

登録日時: 2017年6月02日(金) 17:15
記事: 3
pal さんが書きました:
Ubuntu版ではなく、Mozilla公式版ではどうなりますか?

もし、公式版でも同様であれば、ここで対応できますが、Ubuntu版だけでのことの場合は、ここでは対応しかねます。
その場合は、Ubuntu版のサポートへ。


一度Ubuntu版をアンインストールし、公式からダウンロードしたファイルから再度インストールを行いましたが同じ事象が発生いたします。

_________________
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2017年6月06日(火) 18:06 
オフライン

登録日時: 2013年12月26日(木) 09:33
記事: 686
お住まい: 太陽系、地球、日本、ふてニャン県
rmiyai さんが書きました:
上記テスト用のページを開くと
ページのHTMLはUTF-8指定となっており、FirefoxのテキストエンコーディングはUnicodeと正常に認識しています。

この状態でshift-jisエンコードのファイル名のファイルをダウンロードすると添付画像の様に文字化けが起こります。
※Download E:Shift JIS Raw をクリックするとファイル名がshift-jisエンコードのファイルがダウンロードできます。

このページをubuntu版google-chrome、operaで同様にダウンロードを行ったところ文字化けは起こりません。

UTF-8とShift-jisが混在している条件がおかしいことは承知の上ですが、
他のブラウザで可能なことが不可能なためFirefoxのファイル名の扱いに問題があると考えております。

https://developer.mozilla.org/ja/docs/Web/HTTP/Headers/Content-Disposition
「Content-TypeのcharsetがUTF-8で、Content-Dispositionのファイル名にShift-jisが使われていて、あるいはその逆で、複数の文字コードセットが混在」がおかしいのではありません。
HTTPヘッダーのContent-Dispositionのfilenameパラメーターに許されているのはiso-8859-1のバイナリーのみであり(7bits us-asciiでは無いようです)、
それ以外の場合には、RFC5987エンコーディングを行うfilename*パラメーターを使わなければいけない、
という、「インターネットにおける規則」を無視していることが問題です。

こういった掟破りの碌でもないサイトの不正なfilenameパラメーターのバイナリーデータに対して、
Firefoxは、iso-8859-1を無条件に適用せずに、Content-Typeのcharsetにフォールバックしているようだが、
他のブラウザーは、今も、原理的にはバイナリーから文字コードセットを特定するのは不可能ではあるけれども、
filenameパラメーターのバイナリーから文字コードセットを推測していて、
そのバイナリーがたまたまShift_JISであった場合には、その掟破りの碌でもないサイトの不正なfilenameパラメーターのデータを解釈した時の文字のグリフが、サイトが意図していたグリフ、あるいは、あなたが期待しているグリフと、たまたま同じになった、というだけの話。

原理的に不可能な、文字列のバイナリーからの文字コードセットの特定、を、
他のブラウザーでは、任意の文字コードセットの任意のバイナリーに対して完璧に行っている、
というのならば、
「Firefoxのファイル名の扱いに問題がある」と言ってもいいんでしょうけど、
原理的に不可能であるから、RFC5987エンコーディングとかRFC2047エンコーディングとかが規定されて、メタデータである文字コードセットを指定するようにしているわけでして。

Thunderbirdでも、RFC2047エンコーディングを行っていない不正なSubject:ヘッダーに対して、
原理的に不可能な文字コードの推測のような汚いコードはもう廃止して、7bits-us-asciを内含するするUTF-8として取り扱う、
という決断が、去年あたりになされました。
iso-2022-jpのような、0x1Bといった特異なバイナリーのエスケープシーケンスがある場合には、割と高確率でiso-2022-jpだと当てられてきたんですけどね。
きちんとRFC2047エンコーディングしていないようなメールなんて、多くがジャンクメールであって、未だにそういったメールを送りつけてくるような企業は碌な企業じゃない、というような判断もあったのかもしれません。

また、ブラウザーやメーラーからサーバーに送るパスワードについても、
サーバーに渡されたパスワードのバイナリーをどの文字コードセットとして扱うかは完全にサーバー側の自由で、
以前は、windows-1252のデータを送ってくることを前提にしているサーバーが多かったので、windows-1252で送っていたが、
最近は、utf-8のデータを送ってくることを前提にしているサーバーが増えたので、
既にutf-8に切り替えているか、utf-8で送るようにするリクエストがでています。
パスワードに絡むRFCで、渡すデータはUTF-8である、と規定するものが出てきた、ということもあるかもしれません。

こういった変更は、Thunderbirdが先行しているのではなくて、Mozillaファミリーのコアのコード(Firefoxのコアのコード)におけるUTF-8/Unicodeベースへの転換に追随して行われたものです。

もう、MS/DOS,Windows 3.1,Windows 95といったような、あるいは、古いMSのブラウザー、古いMSのメーラー、といったような、Shift_JIS至上主義の世界ではなくなっているはずです。
古いMSのIEを前提とした、日本国内だけで、一企業内だけで閉じたインターネット環境、というようなものは、もう例外的なものなっていると思います。

少数の例外的なサイトの、ごく少数の例外的なケースの為に、FirefoxやThunderbirdやSeaMonkeyのコードを要求するのは、デベロッパーの、開発のための貴重な時間を奪うだけのものである、と考えるべきだと思います。


通報する
ページトップ
 プロフィール  
引用付きで返信する  
投稿記事Posted: 2017年6月11日(日) 00:13 
オフライン

登録日時: 2017年6月02日(金) 17:15
記事: 3
ご返信ありがとうございます。

未だにレガシーなシステムを利用しているところは多く、
Shift-Jisに対応しなければならない原状です。

Windows環境では文字化けが起こることは無いようですが、
Linux環境では起こりえます。

そのためアドオンでレスポンスヘッダを確認し、shift-jisならばutf8に変換するような機能を実装致しました。



勝手ながら、一部投稿内容を削除させていただきました。
公共の場ということを、お忘れなく。
度が過ぎる場合は、それなりの対応も。
By Moderator

_________________
Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/58.0.3029.110 Safari/537.36


通報する
ページトップ
 プロフィール  
引用付きで返信する  
期間内表示:  ソート  
新しいトピックを投稿する トピックへ返信する  [ 5 件の記事 ] 

All times are UTC + 9 hours


オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[5人]


トピック投稿:  可
返信投稿:  可
記事編集: 不可
記事削除: 不可
ファイル添付: 不可

検索:
ページ移動:  
Powered by MozillaZine.jp® Forum Software © phpBB Group , Almsamim WYSIWYG
Japanese translation principally by ocean