Safariでダウンロード時の日本語ファイル名の文字化け

Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
返信数: 15

Moodle 3.8でeラーニングを動かしています。

Mac環境(Mac OS X 10.14 Mojave)、Safari13.1で、Certificateや評点表などのファイルをダウンロードすると、日本語ファイル名が完全に文字化けしてしまいます。同じMac環境で、ChromeやFirefoxを使えば問題ないので、Safariだけの現象のようですが、Safariの環境設定>詳細からデフォルトエンコーディングの日本語をUnicodeや、Shift-JIS、MacOSなどにいじくっても直りません。

どなたか解決法をご存知でしょうか?

よろしくお願い申し上げます。

貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

Safariの「Preferences (環境設定) > General (一般)」で「Open "safe" files after downloading」(ダウンロード後、"安全な"ファイルを開く)  のチェックボックスのチェックを外してください。

添付 Mac_Safari.png
Mitsuhiro Yoshida への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
ご返信ありがとうございます。ご指摘の点ですが、チェックは外れておりました。Advancedでエンコーディングを変えたり、Moodle側の言語設定>言語設定でExcelのエンコーディングを変えたりしましたが、何をしても、ダウンロードファイルに与えられる評定表や、Certificateなどの日本語名は、「è£çãªã³ã©ã¤ã³è¬ç¿ è©å®」というような状態です。ChromeやFirefoxでは問題ないですので、Safari特有の問題かと思います。https://moodle.org/mod/forum/discuss.php?d=202151にある、./grade/export/xls/grade_export_xls.phpのコード書き換えなどもかつてのMSIEの日本語トラブルには記述がありましたが、ちょっと触ってみましたが文字化けの状況は変わりませんでした。。。。当面、MacユーザーにはChromeやFirefox推奨で対応しています。。。。何か他に対処はあるのでしょうか?
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ご確認頂きまして、ありがとうございます。

以下のようにプログラム修正した場合でもSafari 13.1でダウンロードしたファイル名は文字化けしますでしょうか?

修正対象プログラム:
grade/export/xls/grade_export_xls.php

修正箇所:
53行目

[ 修正前 ]
        // Calculate file name
        $shortname = format_string($this->course->shortname, true, array('context' => context_course::instance($this->course->id)));
        $downloadfilename = clean_filename("$shortname $strgrades.xls");
        // Creating a workbook


[ 修正後 ]
        // Calculate file name
        $shortname = format_string($this->course->shortname, true, array('context' => context_course::instance($this->course->id)));
//        $downloadfilename = clean_filename("$shortname $strgrades.xls");
        $downloadfilename = $shortname . '_' . $strgrades . '.xls';
        // Creating a workbook
Mitsuhiro Yoshida への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
ゴールデンウィークの最中にアドバイスいただき大変感謝申し上げます。
grade/export/xls/grade_export_xls.phpに
$downloadfilename = $shortname . '_' . $strgrades . '.xls';
ご指定の場所に追加し、評定>評定管理>エクスポート>Excelスプレッドシートで、「PPEè£çãªã³ã©ã¤ã³è¬ç¿ è©å®.xml と、日本語部分があいかわらず文字化けしました。やれやれです。。。お時間取っていただき申し訳ございません!
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ありがとうございます。

私の場合、環境が「Mac OS X 10.13.6 High Siera + Safari13.1」でありますため、若干異なりますが、ダウンロードしたファイルの文字化けを再現できないようです。

現在お使いの環境でのファイル名文字化けですが、本投稿の添付画像のようにファイルをダウンロードする直前に「ファイル名 (Save As)」および「ダウンロード場所 (Where)」を指定する段階で文字化けしていますでしょうか、それとも、ダウンロードした後に文字化けしますでしょうか?

また、今回お調べ頂きましたファイル「PPEè£çãªã³ã©ã¤ã³è¬ç¿ è©å®.xml 」の拡張子が「xml」のようですので、もしかしましたら、プログラムを修正しました「Excelスプレッドシート」のエクスポートではなく、「XMLファイル」のエクスーポートでダウンロードされていませんでしょうか?

添付 grade_export.png
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿

以下のようにすれば、変化に反応するようになりましたが、何を選んでも、文字化けです。。。。とほほ・・・

$downloadfilename = clean_filename("$shortname $strgrades.xls");

        // additional

        $browser = strtolower($_SERVER['HTTP_USER_AGENT']);

        if (mb_ereg("safari", $browser)){

        $downloadfilename =  mb_convert_encoding($downloadfilename, "UTF-8", "ASCII,JIS,UTF-8,CP51932,SJIS-win");

            }

        // end additional    

        // Creating a workbook

貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
すいません。xlsxで確認しました。文字化けしますね。でも一つ気が付きましたのは、動作が異なり、ダウンロードボタンを押すと、
問答無用でダウンロードが始まります。どうやったら、お示しいただいておりますように、ファイル名の入力画面が登場するのでしょうか?


Excel ダウンロード

貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
ダウンロードわかりました。Safariの環境設定で「ファイルのダンロード先」を「ファイルごとに確認」の設定ですね。コースのショート名を全文COVID19-PPE-onlineと英語にしましたが、この段階で、「評定」という追加の漢字が文字化けしてしまいました。
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ありがとうございます。

大変お手数ですが、ご提示頂きましたプログラム修正を以下のように修正してダウンロードをお試しください。

[ 修正前 ]
$downloadfilename =  mb_convert_encoding($downloadfilename, "UTF-8", "ASCII,JIS,UTF-8,CP51932,SJIS-win");

[ 修正後 ]
$downloadfilename =  mb_convert_encoding($downloadfilename, "SJIS-win", "UTF-8");

Mitsuhiro Yoshida への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
いろいろと考えていただき感謝申し上げます。ご指摘の方法など含めて、いろいろ試してみましたが、文字化けは直りませんでした。
ひとつ、気がついたのですが、実は、同じレンタルサーバー上で、練習用に同じ用にMoodleをインストールして動かしています。そちらの方は、Safariでも、日本語ファイル名がまったく文字化けしませんでした。
文字化けしない方は、PHP version 7.1.33, Moodle 3.7.2+ (Build:20190913)

文字化けする方は、PHP version 7.3.14, Moodle 3.8.2+ (Build:20200312)
となっています。Themeは、どちらもAdaptableで、他の設定もほぼ同じです。文字化けする方は、評定、受講証などすべてのダウンロードファイルで日本語が文字化けし、それもSafariだけで、ChromeやFirefoxは問題なし。
PHPやMoodleのバージョンが関係しているでしょうか?
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

> PHPやMoodleのバージョンが関係しているでしょうか?

どちらかが文字化けに影響しているように思えます。

まず、Adaptable以外に非標準プラグインが両Moodleサイトにインストールされているかどうかご確認ください。

次に両PHPの設定ファイル (/etc/php.ini) で以下のディレクティブの設定値に違いがあるかどうかご確認ください。

; By default, PHP will output a media type using the Content-Type header. To
; disable this, simply set it to be empty.
;
; PHP's built-in default media type is set to text/html.
; http://php.net/default-mimetype
default_mimetype = "text/html"

; PHP's default character set is set to UTF-8.
; http://php.net/default-charset
default_charset = "UTF-8"

[mbstring]
; language for internal character representation.
; This affects mb_send_mail() and mbstring.detect_order.
; http://php.net/mbstring.language
;mbstring.language = Japanese

; Use of this INI entry is deprecated, use global internal_encoding instead.
; internal/script encoding.
; Some encoding cannot work as internal encoding. (e.g. SJIS, BIG5, ISO-2022-*)
; If empty, default_charset or internal_encoding or iconv.internal_encoding is used.
; The precedence is: default_charset < internal_encoding < iconv.internal_encoding
;mbstring.internal_encoding =

最後にMoodle 3.7はPHP version 7.3.14でも動作しますので、可能でしたら、Moodle 3.7.2+ (Build:20190913) のPHPを7.1.33から7.3.14に換えて、Safariでダウンロードファイルの文字化けが発生するかどうかご確認ください。

参考資料:
[Moodle 3.7 release notes - Server requirements - MoodleDocs]
https://docs.moodle.org/dev/Moodle_3.7_release_notes#Server_requirements

[PHPのマルチバイト環境と文字化けに関する問題のまとめ - ABC Blog]
https://linuxserver.jp/プログラミング/php/マルチバイト環境の文字化け対策/

[Moodle plugins directory: Adaptable]
https://moodle.org/plugins/theme_adaptable

Mitsuhiro Yoshida への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿

> PHPやMoodleのバージョンが関係しているでしょうか?
PHPのversionを7.3.14に合わして、かつphp.iniもご指摘のように合わしました。プラグイン等も特に差がございません。あとの違いは、Moodleのversionが3.7.2か、3.8.2の違いのようですが、3.8.2の方は、PHPの条件を合わせても、Safariダウンロードで日本語ファイル名の文字化けは直りませんでした。

実は、同じ会社(Xserver)の別のレンタルサーバーに、別のMoodleのeラーニングサイトを学生講義用に最近、ver 3.8.2 + PHP ver 7.3.14で動かしていますが、こちらもSafariでは、日本語ファイル名が「麻éç§å­¦ã¨ã¯ è©å®.xlsx」というように文字化けしてボロボロです。これまでの調査だと、どうやらMoodleのversion 3.8.2  (Build:20200312)に依存した現象のように思えます(自信はないですが。。。)

貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

> これまでの調査だと、どうやらMoodleのversion 3.8.2  (Build:20200312)に依存した現象のように思えます(自信はないですが。。。)

以下の環境で試してみましたが、Excelスプレッドシート形式での評定表エクスポート時には文字化けしないようです。

  • Moodle 3.8.2+ (Build: 20200312)
  • Theme Adaptable
  • PHP 7.3.17
  • MariaDB 10.3.22
  • macOS High Sierra 10.13.6
  • Safari 13.1 (13609.1.20.111.8)

添付 grade_export.png
貞治 佐和 への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators

ファイルダウンロード時の文字化けを確認しましたMoodle 3.8.2+ (Build: 20200312) の「管理 > サイト管理 > サーバ > 動作環境」の画面です。

添付 Server checks.png
Mitsuhiro Yoshida への返信

Re: Safariでダウンロード時の日本語ファイル名の文字化け

- 貞治 佐和 の投稿
ありがとうございます。何か、不都合なことを、私がインストール時か、その後にしたのでしょうね。もう一度、思い出してもう一度、いろいろと検討してみます。本当にお休み中にも関わりませず、ありがとうございました。また何かわかればご報告させていただきます。

動作環境