ファイルのアップロード、ダウンロード時に文字化けします

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿
返信数: 54
遅ればせながらつい先日よりSubversionを使い始めましたが,Tracというのはまだ調べていませんでした.どうやらSubversionとの相性が非常に良いもののようですね.でも,これでMoodleのWikiを使わなくなるとMoodleのバグ出しの機会が減りそうですね複雑な

 Subversionは便利ですね.WindowsのクライアントTortoiseSVNは気持ち悪いくらいに使い易い.昔使っていたRCSとは比べ物にならない.もっとも,先ほどリポジトリエディタでtags内のフォルダを丸々消してしまってオタオタしていたところですが...

 先ほども,本家Moodleの更新箇所を自分のfs_moodleにマージしたところ,一瞬で終わってしまい,びっくりしました.いまのところ自分の修正と本家の修正が衝突していないからでしょうね.いやぁ,便利な世の中になっていたのですね.五月女さんのページのPHPのクロスリファレンスも見ました.他のサイトで同じことを行っているのをみて,これはデバッグの効率が上がるだろうなぁと感心していたところです.

 私のfs_moodleはWindowsPCにとって助かる修正,が中心です.それでもいくつか本家に訴えかけたい改良点もあります(バグは報告しています).そろそろJapaneseのコースで,まとめを始めませんか?

  • 日本語以外の外国語環境(=非英語圏)も影響のある問題点と改善法(本家に報告)
  • 日本語環境に固有の問題点と改善法
  • 日本語以外の外国語環境(=非英語圏)で役立つ改良点(本家に報告)
  • 日本語環境でのみ役立つ改良点

 問題点とはマルチバイトへの対応の甘さといったケアレスなバグや仕様の不十分さ,改良点とは姓と名の並び順といった”こうなっていた方が助かるなぁ”ですね.日本語環境に固有の問題点といえば,IEのダウンロード時に文字化けする問題が代表です.

 今回,山田さんの質問に答える際に,もう昔のことをすっかり忘れていることに気づきました.フォーラムに可能な限り足跡は残したつもりですが,それを時系列に追うのは難しい.バージョンの違いによる対処法の違いなどもあるでしょう.

 これらの日本語および日本語ファイル名/フォルダ名への対応をまとめたWikiをこのコース内に作れないでしょうか? 来年になったら私も自分が行った対策を逆引きできるWikiを作ろう(この問題に対しては,こことここをこのように対策)と考えていたのですが,皆さんで対策方法を出し合った方が良いコードになりそうです.各人が配布しているパッケージの方言が減るでしょうし,本家に取り込まれればパッチの手間も減ります.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
> これらの日本語および日本語ファイル名/フォルダ名への対応をまとめたWikiをこのコース内に作れないでしょうか?

白井先生

「日本語対応Wiki」のようなタイトルでよろしいでしょうか?
よろしければWikiタイトルのご希望をお知らせください。笑顔



Mitsuhiro Yoshida への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

「Moodleの多言語本格対応化Wiki」あたりで如何でしょう?

 でも,ここのWikiを使うと,キャメルオートリンクONでもOFFでもソースコードのアップロードに問題があるし,++等の装飾の問題や,スマイリーの影響もあるし,悩ましいですね.といってスタートしないといつまでも問題が先送りになりますので,現状でどのように回避するかを考えながらボチボチいきましょうか.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Yuichi Saotome の投稿
五月女です.

これは,吉田さんに聞くべきかもしれませんが, http://docs.moodle.org/ja/ は使えないのですか?
中身はMediaWikiなので,ソースコード等の表示にも問題無いと思います.

#ただ,「ドキュメント」という定義からすると,議論を持ち込むべきではないのかもしれませんが
Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
?これは,吉田さんに聞くべきかもしれませんが, http://docs.moodle.org/ja/ は使えないのですか?
>中身はMediaWikiなので,ソースコード等の表示にも問題無いと思います.

はい、http://docs.moodle.org/ja/ も使えますね。笑顔
管理者ドキュメント」内に「多言語本格対応化」等のページを追加できると思います。

「このコース内のWiki」「docs.moodle.org/ja」のどちらか使いやすい方をお使いください。

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Mitsuhiro Yoshida の投稿
画像 Developers 画像 Particularly helpful Moodlers 画像 Translators
>「Moodleの多言語本格対応化Wiki」あたりで如何でしょう?

作成させていただきました。

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Yuichi Saotome の投稿
五月女です.

Subversion便利ですよね.使い慣れると手放せないツールになります.笑顔
クロスリファレンスもとても便利です.これがないと開発する気になりません.
Tracはリポジトリブラウザ化してますが...(変更箇所の差分表示がとても便利です.)
修正点のまとめはもっぱらPukiWikiです.
Wikiって記法を覚えるとかなり便利なんですが,一度あるWikiの記法を覚えるとそのWikiから離れられなくなります.
#いっそPukiWikiをMoodleに移植したいくらいです.

私も日本語圏(というか日本の大学?)特有の問題をまとめるという意見に賛成です!賛成
このまま各人(各教育機関)が独自対応をしつづけるよりもより良い物ができるでしょうし,意見が集まれば流石に本家も対応してくれるでしょう.
それに,日本でのMoodle利用への敷居も下がると思います.
Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
うちも三重大学版Moodleソースページに書いてあるように現在はSubversionで管理しています。1.6系統,1.8系統,それにElggも手を付けました。

どこかで日本のMoodleパッチが一元管理されればいいと思っています。

本家 → 日本語版 → 各大学版

のように階層的に差分があてられるようになれば便利です。

残念ながら日本の大学で学籍番号が必要だなどと言っても本家に対応してもらうのはほぼ不可能のようです。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Yuichi Saotome の投稿
返信ありがとうございます.

> うちも三重大学版Moodleソースページに書いてあるように現在はSubversionで管理しています。1.6系統,1.8系統,それにElggも手を付けました。
三重大学版のリポジトリは拝見させていただいております.
運用上必要な改善・修正の情報を取得できるので助かっている管理者の方もたくさんいらっしゃると思います.(私もその一人です.)
しかし,Subversionだけで修正点を管理されているのですか?
それですと,個々の修正が何のために(どういった理由があって)行われたのか把握できなくなりませんか?

> どこかで日本のMoodleパッチが一元管理されればいいと思っています。
私も,日本語ファイル名,文字化け等に完全対応したパッチをまとめて作り,そこからは各大学等の教育機関が独自に作り込んでいく形が望ましいのではないかと思っています.
正に奥村先生がおっしゃる通り,本家に対して最初に適用するパッチがあると便利ですよね.

しかし,どういった形で配布するのが便利なんでしょう.複雑な



Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
やっと時間がとれるようになりましたので,三重大学版Moodleを見直しています。まずは1.8.3+の最新版をマージし,ファイル名やWikiをいじったところです。まだテストはちゃんとできていません。

fs_moodleとの差分もとってみたのですが,Windowsサーバを使う場合のパッチとLinuxサーバでも必要なパッチとの切り分けが面倒で,あまり進んでいません。Wiki関連ではかなり取り入れさせていただきました(ついでにewiki.phpをUTF-8に単純に変更してみました)。WikiでHTMLエディタを使うと「絵」という文字が化ける問題も直ったみたいです。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
http://oku.edu.mie-u.ac.jp/tex/
で三重大学版1.8.3+をテストしています。IE6での日本語ファイル名でのアップロード・ダウンロードもうまくいっているように見えます。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

山田です。昨年は大変お世話になりました。

バグ改修、ありがとうございます!!!!満面の笑顔

三重大学版1.8.3+のバグフィックス版はいつごろ、またどこのページから

DLできるようになりますでしょうか?

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
すでにいつもの方法でダウンロードできます。
Subversionですが,おわかりになりますでしょうか。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

山田です。

<http://portal.mie-u.ac.jp/src/>のmoodle08.tar.bz2 をダウンロードして

試してみました。

やはり、日本語名ファイルをUPしようとしても、

「申し訳ございません、ファイルが見つかりませんでした」になってしまいます。

また、前にUPされていた1.8.3で、可能だったことができなくなってしまいました…。

エクセルファイルの中身が文字化けしてしまいます。(受験結果の情報をエクセルフォーマットでダウンロードした結果です)

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
おかしいですね。
これをそのまま使ったサイトが
http://oku.edu.mie-u.ac.jp/tex/
です。申し訳ありませんが,ここに入って練習用フォーラムで試してみてくださいませんでしょうか。練習用のところならいくら散らかしてもかまいませんので。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
ついでに動作テスト用コースを作って山田さんを教師にしてしまいました。勝手にすみません。どうぞご自由に実験してください。

ところで

$CFG->unicodedb = true;
$CFG->unicodecleanfilename = true;

は設定されているでしょうか。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

ディスカッショントピックでテストさせていただきました。

無事、ファイル名に日本語を使用したものをUPできました。

自分の作ったサイトで、コース内の「ファイルまたはウェブサイトにリンク」でファイルをUPしようとした時に文字化けしてしまいます。

http://oku.edu.mie-u.ac.jp/texの動作テスト用で試させていただこうかと

思ったのですが、編集モードに切り替えることができなかったので、試せませんでした・・・。申し訳ございません。)

ちなみに、IE7.0だとtxtファイルなら無事文字化けせずに見れました。

エクセルをUPすると、ファイル名は微妙に文字化け、中身は完全に

文字化けしてしまいました。

「ディスカッショントピック」と「ファイルまたはウェブサイトにリンク」と使用されている

PHPのソースは同じなのでしょうか??

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

すいません!!管理メニューの中に編集モードの切り替えボタンがありましたね。

リソースの追加(ファイルまたはウェブサイトにリンク)でテストしてみました。

やはり「申し訳ございません。ファイルが見つかりませんでした。」のエラーになってしまいました。

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
そうですか,フォーラムじゃなくてリソースでエラーになるのですね。
Excelのほうは大丈夫でしたか?

ついでに白井先生も教師権限にさせていただいちゃいました。すみません。何かの折に動作確認にお使いください。
山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
よく理解できていないのですが,ファイルまたはウェブサイトにリンクでもうまくできているようですし,山田さんのもちゃんと見えています。どのようになるのでしょうか。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

それでは、私の環境のせいかもしれませんね…。

私のPCでは添付ファイルのような画面になります。

OSはWIndows XP Professional SP2,IEは6.02です。

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
あ,ごめんなさい。IE6の話でしたね。^^;

Windowsを起動してIE6でいまやってみました。確かに「見つかりません」になりますね。わかりました。直してみます。

FS版では大丈夫なんでしょうか>白井先生。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

すいません。テスト環境を作っていただき、しかも先生の権限まで

与えていただいて、、、ありがとうございます。

あと、以前の1.8.3では受験結果やログなどをエクセル形式でダウンロードした時に

文字化けせずちゃんと中身が見れたので、その修正も新しい1.8に入れて

いただくと有難いです。

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
とりあえず白井先生のFS版と似たrawurlencodeによって対処しました。これでIE6でも見つかりませんにならないはずです。

あと,Excelを扱う部分は1.8.3→1.8.4でいじっていないはずなのですが,1.8.4になってできなくなったでしょうか。私のところで再現できるでしょうか。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村先生、ありがとうございます!!!

無事IE6でも閲覧できました。ほげほげほげほげ等のリンク、見れました!(何故か「てすと」のリンクだけ化けてましたが)

Excelの中身文字化けは、1.8.4になってからできなくなりましたね。

(Excelのファイル名は1.8.4でも化けてました。)

Excelは、小テストを作って、学生がそのテストを受験してから、

管理者が小テストの受験結果のデータをダウンロードするところで見れます。

お手を煩わせては大変申し訳ないので、学生ユーザを作っていただければ

こちらで準備させていただきます。

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
学生ユーザを作ろうと思ったら,すでに早乙女さんが学生として登録してくださっていました。どうもありがとうございます。m(__)m

Excelについては,あまり私自身使わないもので,すみません。おかしい個所を教えていただければ助かります。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

了解しました。

画面左の「管理」のメニューの中に、さっきまで「編集モード」への切り替えボタンが

あったと思うのですが、消えてしまって「評定」しか見れなくなってるようです。

お手数ですが、編集ができるようにしていただけますか?

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
編集モードへの切替のボタンは画面右側ではないでしょうか?
ご確認いただければ幸いです。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Yuichi Saotome の投稿
五月女です.

現在の話題が逸れてしまうかもしれませんが,試しに三重大学Moodleのsvn版を使わせていただいるのですが,次の様な文字化けを見つけました.

*実験環境
RHEL4
Apache2.2.4
PHP5.2.3
MySQL5.1

WindowsからFrefox2を用いて文字化けを起こす文字列(参考:http://www.psl.ne.jp/perl/pdojo00c.html)をファイル名に含んだzipファイルをアップロードした場合です.
アップロードは正常行え,文字化けも発生せず,ファイルのダウンロードも正常に行うことができるのですが,Moodle上で展開した際に展開後の名前が文字化けを起こします.
またIE6を用いた場合は下記画像の様なエラーが発生し,展開すらできません.
これはPHPのZIP展開機能を利用した場合に発生しました.ZIPコマンドを用いた場合のテストも行ってみます.

また,IE6において日本語名のディレクトリ以下に配置してあるファイルをダウンロードすることができません.(Firefox2,IE7ではできました.)

添付 tenkai.png
Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
早乙女さん,ありがとうございます。
ZIPファイルについては,そうですね,Windows上でZipしたアーカイブを単純に展開すると,中のファイル名がShift JISですので,おかしくなってしまいますね。ちょっと考えさせてください(パッチ歓迎します)。
Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Yuichi Saotome の投稿
自己レスです.

RHEL4の/usr/bin/unzipを使ってみたところ,ファイル名がすべて文字化けしてしまいました.
探してみるといろいろ解決方法がありそうですので,試してみます
Yuichi Saotome への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 ファイル名に'\' (5C)が含まれると展開時におかしなことになる問題は,lib/pclzip/pclzip.lib.phpにあります.以下の2箇所です.

http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=view/lib%2Fpclzip%2Fpclzip.lib.php

↑こちらに記録してありますが,まとめてないため,読みにくいですね.なお,fs_moodle用に書いた修正ですので,一般的なMoodle用に手で直しました.(2)の方はWindowsをサーバとする場合にのみ必要な修正ですので,以下の(1)の修正だけで大丈夫なはずです.

(1) privAddFileList() : 2450行近辺

// ----- Loop on the files
for ($j=0; ($j<sizeof($p_filedescr_list)) && ($v_result==1); $j++) {
// ----- Format the filename
// ここでパス中の'\'を'/'に置き換えるが,既に置き換え済み(のはず).
// マルチバイト文字列(PHPの内部文字コードと一致している保障なし)中の'\'を
// 強制的に書き換えるのでフォルダ名/ファイル名が化ける原因になる.
// したがって,以下2行(一文)は不要.
// $p_filedescr_list[$j]['filename']
// = PclZipUtilTranslateWinPath($p_filedescr_list[$j]['filename'], false);

//--(MAGIC-PclTrace)--//PclTraceFctMessage(FILE, LINE, 2, "Looking for file '".$p_filedescr_list[$j]['filename']."'");


 コメントにも書きましたように,既にパス区切りの置き換えはその前に行われているようでしたので,この処理は不要なはずです.


 いま調べ直してみたら,OSがWindows以外の場合は結局,PclZipUtilTranslateWinPath()は素通りするので実害は無さそうですね.となりますと別の問題でしょうか.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

徐々に思い出してきました.

http://www.suzuka-ct.ac.jp/mech/moodle/mod/wiki/view.php?id=320&page=view/lib%2Fmoodlelib.php%2Fzip%E9%96%A2%E9%80%A3

こちらの"(3) unzip_cleanfilename(): 6285行近辺"のところに書いてある内容が関係していそうです.

 function unzip_cleanfilename ($p_event, &$p_header) {
//This function is used as callback in unzip_file() function
//to clean illegal characters for given platform and to prevent directory traversal.
//Produces the same result as info-zip unzip.
// (FS_CONVERTER):ZIP/UNZIP/LISTZIPの際のヘッダー情報に含まれるファイル名をカレント文字セットに変換する
// (FS_CONVERTER):unzipする際に日本語ファイル名/フォルダ名中の'\'が'/'に変換されて文字化けする問題の対策
// (FS_CONVERTER):一旦,UTF-8に変換してから処理を行い,再びファイルシステムの文字コードに戻す.

$p_header['filename'] = zipitem2currentCharset($p_header['filename']); // (FS_CONVERTER)
$p_header['filename'] = ereg_replace(':cntrl:', , $p_header['filename']); //strip control chars first!
$p_header['filename'] = ereg_replace('\.\.+',
, $p_header['filename']); //directory traversal protection
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$p_header['filename'] = ereg_replace('[:*"?<>|]', '_', $p_header['filename']); //replace illegal chars
$p_header['filename'] = ereg_replace('^([a-zA-Z])_', '\1:', $p_header['filename']); //repair drive letter
} else {
//Add filtering for other systems here
// BSD: none (tested)
// Linux: ??
// MacosX: ??
}
$p_header['filename'] = cleardoubleslashes($p_header['filename']); //normalize the slashes/backslashes
$p_header['filename'] = convert2fsCharset($p_header['filename'], 'UTF-8'); // (FS_CONVERTER) (ADD)
return 1;

}

一つ目の赤い行が重要で,2つめの赤い行(convert2fsCharset())はOSのファイルシステムがUTF-8に対応している(Windows以外ですね)ならば不要なはずです.

なお,zipitem2currentCharset($p_header['filename'])は自作の関数で,fs_converter.phpに含まれている以下の関数です.

     function zipitem2currentCharset($str)
    {
        $encoding = mb_detect_encoding($str, 'auto');
        $str = mb_convert_encoding($str, 'UTF-8', $encoding);
        return $str;
    }

あら,fs_moodle固有の機能を取り除いたらシンプルな関数になってしまいましたね.では,これをそのまま組み込んで,以下のように.


function unzip_cleanfilename ($p_event, &$p_header) {
//This function is used as callback in unzip_file() function
//to clean illegal characters for given platform and to prevent directory traversal.
//Produces the same result as info-zip unzip.
    $p_header['filename'] = mb_convert_encoding($p_header['filename'], 'UTF-8', 'auto');  // (ADD)
    $p_header['filename'] = ereg_replace(':cntrl:', '', $p_header['filename']); //strip control chars first!
    $p_header['filename'] = ereg_replace('\.\.+', '', $p_header['filename']); //directory traversal protection
    if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
        $p_header['filename'] = ereg_replace('[:*"?<>|]', '_', $p_header['filename']); //replace illegal chars
        $p_header['filename'] = ereg_replace('^([a-zA-Z])_', '\1:', $p_header['filename']); //repair drive letter
    } else {
        //Add filtering for other systems here
        // BSD: none (tested)
        // Linux: ??
        // MacosX: ??
    }
    $p_header['filename'] = cleardoubleslashes($p_header['filename']); //normalize the slashes/backslashes
    return 1;
}

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 昨日は学外の会議とそれに続く懇親会のため半日まるまる(珍しく)オフラインになっていたため出遅れましたウインク

 評定のダウンロードでファイル名が化ける(IE限定)のは,

grade/lib.phpのgrade_download()関数後半,ODS/Excel/テキストフォーマット形式で実際にファイル出力する箇所,たとえばExcelであれば,1370行近辺,

    } else if ($download == "xls" and confirm_sesskey()) {
        require_once("../lib/excellib.class.php");

    /// Calculate file name
//      $downloadfilename = clean_filename("$course->shortname $strgrades.xls");
          $downloadfilename = mb_convert_encoding(clean_filename("$course->shortname $strgrades.xls"),"SJIS-WIN")

 ここです.これは,ODSでもテキストファイルでも同じようにエンコーディングする方法で現在は対処しています.ブラウザの種別によってエンコードするかどうかを判別する関数を以前に作った気がするので,この手の箇所(沢山ありますよね...)をリストアップし,潰していきましょう(これは後日のお話).

 なお,シート名が化ける問題もあります.これはlib/pear/Spreadsheet/Excel/Writer.phpに修正を行うことで改善されます.私の場合(fs_moodle)はそのついでにファイル名の変換もWriter.php内で行うように修正しているため,オリジナルのままに戻してあります.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
私のところでは,コースのショートネームのほうは英数字で名付けられていると仮定して,

// $strgrades = get_string("grades");
$strgrades = "Grades"; // okumura

で対応してあったと思います。山田さんのところで文字化けしたとすれば,1.8.4+ になって文字化けしたのではなく,ひょっとしてたまたまコースのショートネームが全角になっていたということではないでしょうか。

どうしてこうしたかというと,ユーザがアップロードするファイル名はしかたがないにしてもMoodleで生成するファイル名が全角である必要はないと思ったのでした。MacとかLinuxとか使っているのでなるべく全角ファイル名は増やしたくなかったので。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 確かに.コースのショートネームに日本語を許すと日本語ファイル名(コースのバックアップのZIPファイル)が作成されますね.サーバOSが日本語Windowsの場合はこれも当然,文字化けしたファイル名になってしまい,トラブルの原因になりました...fs_moodleでもバックアップ作成に関して最初の段階で対応しましたが,古いバックアップファイルは削除されずに蓄積され続けるなど,後々まで尾を引きました.いまは多分,大丈夫なはずです.

// $strgrades = get_string("grades");
$strgrades = "Grades"; // okumura

私も同じ修正を以前は行っていました.Excelのシート名といっても,”評定”か”ログ”の2種類しか目にしたことがありませんでしたので...


なお,シート名はコースのショートネームではなく,”評定”(あるいはGrade)のはずなのです.したがって,↑のパッチが生きていればシート名は文字化けしないはずです.

 ダウンロードしたExcelファイルをバイナリエディタで見てみると,"04 00 8A 54 97 76"とシート名のデータが書き込まれています.04は4byteのデータであること,00はエンコードされていないデータ,そして4byteのデータが8A 54 97 76である,と.UTF-8では”詔靶”です.間違えて”評定”がUTF-8形式で(正しくはUTF-16LE)が紛れ込んでしまったのかな?と思ったのですが,違うようです.ちなみにこのファイルをExcel2003で開き,シート名をGradeに書き換えると,"05 00 47 72 64 64 65"となります.5文字,エンコードなし,G, r, a, d, e,です.何かがおかしいですねぇ.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様、白井様

度々お世話になります。笑顔

http://oku.edu.mie-u.ac.jp/tex/mod/quiz/report.php?q=1

の「動作テスト用」(ショートネーム:alt)で小テストをさきほど作成しました。

先生の権限を持つユーザーで入っていただき、「小テスト」->「受験結果」->「Excelフォーマットでダウンロードする」を押していただくと、添付ファイルのキャプチャようなファイル名になります。

どうやらファイル名は、ショートネーム_テスト名.xlsになるようです。

私が作っていた環境ではショートネームは日本語だったのでファイル先頭部が

化けていました。

奥村先生や白井先生のご意見を参考にすると、ショートネームは英数字で作成したほうが良さそうですね・・・・複雑な

さらに小テストの名前も英語で管理すれば、(「Lesson1」とか?)ダウンロードされたエクセルファイルも化けずに済むのかもしれません。

できれば日本語にしたいのですが・・・

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 ダウンロードされるExcelファイル(ブック)の名前と,ブックの中のワークシート名(時々私は省略してシート名と書いています)が話の流れの中で混ざっているようです.

 ワークシート名はExcelの画面下のタブ(Excelで新規作成したワークシートではSheet1)の名前で,これはオリジナルのMoodleならば小テストの評価シートの場合,"評定”あるいは"Grades"で固定です.コースのショートネームとは別です.

 ダウンロードしようとするExcelのブックの名前が化けるのは比較的対応が難しくない問題(失礼!)ですので,小テストの名前まで日本語の使用を制限することではないと思います.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
そうですね。私のところのサンプルコースの評定Excelファイルは文字化けについては問題なさそうに思えます。

一つ気がついたことは,少し前から姓と名が逆転してしまっていたこと。これはいろいろやっているうちに言語ファイルをMoodleが自動でダウンロードしてしまったためです。moodledataの言語ファイルを消したら元に戻りました(そのかわり五月女さんの姓と名が逆転しました ^^;)。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 ファイルの中身の文字化けは発生しませんが,ダウンロードするブックのファイル名は,IEですと(IE6/7共に)まだ化けます(サンプルのコース,山田さん作成の小テスト).

    } else if ($download == "xls" and confirm_sesskey()) {
        require_once("../lib/excellib.class.php");

    /// Calculate file name
//      $downloadfilename = clean_filename("$course->shortname $strgrades.xls");
          $downloadfilename = mb_convert_encoding(clean_filename("$course->shortname $strgrades.xls"),"SJIS-WIN");

こちらのパッチも当てて見て頂けないでしょうか.

#今日もこれから会議に行ってきますので返信は夜中までできません.ちょっとメタボリックが心配.赤面

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
ありがとうございます。このあたり,マルチプラットフォームを意識して,ファイル名をShift JISにするのをためらっていました。

結局,ファイル名は(コースのショートネームに全角が含まれない限り)英語だけになるように直してしまいました。シート名もみな英語にしてしまいました。これなら化ける心配がありません。^^;

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 確かにひとつの選択肢です.ダウンロードしてからファイル名を変えるのが当然であるといえば当然ですね.なまじ自動的にファイル名を作ってくれるのでそれに甘えてしまいがちですが.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

Okumura様

お世話になります。山田です。

今までのやりとりの改修を入れた最新のソースはSubversionのところに

アップされてますでしょうか?

それとも

2008年1月16日版スナップショット:moodle08.tar.bz2 (Moodle 1.8.4+ ベース)

が最新ですか?

お手数ですが、教えていただけるとありがたいです。

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
つねにSubversionが最新です。

もしSubversionに慣れておられないなら,言っていただければその時点でのスナップショットをtar.bz2形式でアップします。
山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
たった今の1.8系列スナップショットもアップしておきました(表示がまだ元のままかもしれません)。
Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

大変ありがとうございます。_(__)_ペコ

再インストールしてみます。

山田 花子 への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

ダウンロードさせていただき、無事稼動確認しました!満面の笑顔

日本語名ファイル使用 → OKウインク

エクセルファイルの中身の表示(アップロード、ダウンロード共に) → OKウインク

ありがとうございました。

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

奥村様

ディスカッショントピックでテストさせていただきました。

無事、ファイル名に日本語を使用したものをUPできました。

自分の作ったサイトで、コース内の「ファイルまたはウェブサイトにリンク」でファイルをUPしようとした時に文字化けしてしまいます。

http://oku.edu.mie-u.ac.jp/texの動作テスト用で試させていただこうかと

思ったのですが、編集モードに切り替えることができなかったので、試せませんでした・・・。申し訳ございません。)

ちなみに、IE7.0だとtxtファイルなら無事文字化けせずに見れました。

「ディスカッショントピック」と「ファイルまたはウェブサイトにリンク」と使用されている

PHPのソースは同じなのでしょうか??

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 fs_moodle中のWindowsPCをサーバとして使用するための変更箇所(// (FS_CONVERTER))と,それ以外の変更箇所(// (T.Shirai))というコメントの使い分けも途中から適当になってしまい,判読が非常に難しくなってしまった点は本当に申し訳ありません恥ずかしい

 なお,Moodleの多言語対応に必須の修正個所を調べている最中なのですが,実は(IE固有の問題を除けば)ごく数箇所なのではないでしょうか?

> WikiでHTMLエディタを使うと「絵」という文字が化ける問題も直ったみたいです。

 この問題ですが,当方のWikiでは化けないですねぇ.いま自宅なので調べようが無いのですが,後日,ewiki.phpの文字コードをチェックしてみます.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

> WikiでHTMLエディタを使うと「絵」という文字が化ける問題も直ったみたいです。

ewiki.phpの頭5,6,7行の3行分を以下にペーストしました.

  ErfurtWiki - an embedable, fast and user-friendly wiki engine
  ����������
  This is Public Domain (no license, no warranty); but feel free

当方の環境ですと,6行目のところには白抜きの四角形文字(豆腐?)が10文字並んで見えます(VLゴシックフォントの場合.MSゴシックですと中点(・)です.Firefoxですと菱形の中に疑問符の文字).この部分をバイナリエディタで調べてみると,EFBFBDが10文字分,連なっています...シフトJISコードには対応する文字がありませんが,UTF-8には割り当てがあるようです.ただ,文字が表示されない何か,特別な意味合いのある文字コードなのでしょうか?

 不完全な調査ではありますが,一応,オリジナルのewiki.phpもUTF-8で作成されているのではないでしょうか?

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Haruhiko Okumura の投稿
> オリジナルのewiki.phpもUTF-8で作成されているのではないでしょうか?

時間の関数みたいに思えます。最初はISO-8859-1でしたが12月29日にダウンロードした1.8.3+のものは完全に化けているように見えます。

うちのSubversionレポジトリに入れたものはUTF-8で次のように直しました:

ErfurtWiki - an embedable, fast and user-friendly wiki engine
¯¯¯¯¯¯¯¯¯¯

Haruhiko Okumura への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 状況を確認しました.これはかなり大きな問題のような気がします.

 元来,ISO-8859-1(Latin1,秀丸エディタでは”欧文”)でエンコードされていたソースファイルが,ISO-8859-1でもUTF-8でもない形式に変換されていますね(単に壊れている?).英数記号文字以外の欧文特有の記号(上付きの2なども)が化けていますね.

 添付した画像,上は2007年2月2日版のMoodle1.7.1に付属のewiki.php,下は2007年12月28日版のMoodle1.8.3+に付属のもの.function ewiki_page_css_container()関数の一部,638行あたりです.秀丸エディタで文字コードを”欧文”(多分,ISO-8859と解釈しているのだと思います)で開いた結果です.どちらもUTF-8で開くと該当箇所は化けます.少なくとも古いeWiki.phpはISO-8859-1ならば判読可能ですし,このファイルをUTF-8で保存すれば正しくUTF-8に変換できますが,最新のewiki.phpは化けたままですので救いようがありません.古いewiki.phpをUTF-8で保存し直し,自分で修正した箇所を適用し直す必要がありそうです.

 以前に,Wikiのページがときどき表示されない問題(キャッシュの問題)で,strtr()のパターンが当方の環境で読めなかった時,それとキャメルリンクケースを無効にする際に発生する問題の時にも,欧文文字が当方の環境では読めませんでした.その際に,ソースファイルの文字コードがUTF-8ではなく,Latin-1になっていることに気付くべきでした.

 現在の”壊れたLatin-1形式”のソースファイルは異常です.どのような処理を行った結果,こうなったのでしょう.また,これがeWikiのソースコードだけに発生している異常なのか.他のライブラリは大丈夫なのでしょうか.仕事は進まず,逆戻りしますね...Wikiのソースコードは,ほとんどメンテナンスが行われていないのが救いといえば救いです...

添付 Latin1UTF8error.jpg
Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- Tatsuya Shirai の投稿

 ewiki.phpファイルの文字コードの問題は予想以上に症状が重症ですので,議論を分割します.

続きは,

http://moodle.org/mod/forum/discuss.php?d=87632

へ書き込みます.

Tatsuya Shirai への返信

Re: ファイルのアップロード、ダウンロード時に文字化けします

- 山田 花子 の投稿

Shirai様

昨年は大変お世話になりました。

Wikiのほうでも様々な問題があるのですね…。

プログラム改修と調査、本当に助かります!