200 likes | 296 Views
ど~した もんだか. 日本語 Windows とモバイル機器に強い fs_moodle パッケージの紹介. Introduce of fs_moodle package. 鈴鹿工業高等専門学校 機械工学科 (Suzuka National College of Technology, Mechanical Engineering) 白井 達也 (Tatsuya SHIRAI) shirai@mech.suzuka-ct.ac.jp. 日本語 Windows OS が抱える File System の問題点(仕様)を
E N D
ど~した もんだか... 日本語Windowsとモバイル機器に強いfs_moodleパッケージの紹介 Introduce of fs_moodle package 鈴鹿工業高等専門学校 機械工学科(Suzuka National College of Technology, Mechanical Engineering) 白井 達也 (Tatsuya SHIRAI) shirai@mech.suzuka-ct.ac.jp
日本語Windows OSが抱える File Systemの問題点(仕様)を 解決するための仕組み(fsconverter.phpからスタート) fs_moodle(エフエス・ムードル)とは? もう少しだけ詳しく,fs_moodleの仕組みを解説
本校で2007年2月に 三重大学の奥村教授がMoodleに関する講演を行なう. 研究室で使うグループウェアを 探し続けていたところなので, 早速,部屋に戻ってから情報収集, そのまま一気にインストール(できてしまった) 余剰のPC (Compaq DeskProEN, PentiumⅢ866MHz, 30GB HDD, 386MB RAM, Windows2000) 非常に遅いが,一応,動作した.
OSは Linux,Mac OS, Windowsが利用可能! なのだが!
Windows(WindowsServer含む)は確かにOKなのだが,Windows(WindowsServer含む)は確かにOKなのだが, 日本語Windows (日本語WindowsServer含む)には 致命的な問題点のあることが, 「使ってみてから判明」
そんなことはない! 利用者にお願い強制など不可能! 「あ,それは仕様です」 名前に日本語を含む ファイルやフォルダが 使えない! 議事録20081114.doc 二分法.c 予算割り当て.xls ロボット工学その1.ppt 「Web上で日本語のファイル名を使うのは 御法度でしょ,そんなの常識,常識」 (注) Linux, Mac OSならば問題なし
ファイルシステムの違いです Why? Linux, Mac OS UTF-8に対応できる 自由でシンプルなシステム 日本語Windows マルチバイトはShift JISを前提 (NTFS:内部ではUTF-16)
Unicode 多言語の文字を単一の文字コードで取り扱うために 1980年代に提唱 当初は16bit → Unicode2.0から21ビットに拡張. (16bitの領域) 基本多言語面(BMP: Basic Multilingual Plane) 最も使われる基本的な文字・記号がほとんど含まれる. (実用的にUnicode≒16ビットのBMP) UTF-8/16はUnicodeの文字符号化方式の名称 (Unicode Transformation Format)
ASCII文字列 → UTF-8(1バイト)は完全に同一 → 日本語文字化けの主要因!(海外製ソフトウェア) 日本語文字は必ず3バイトを要する. MoodleはUTF-8に対応済み (見落し有り...) Unicode (UTF-8) • Unicode(主に16ビット)を • 1~3バイトで表す可変長の符号化法 • 頭1ビットが0であれば1バイト長 • 頭3ビットが110であれば2バイト長の先頭バイト • 頭4ビットが1110であれば3バイト長の先頭バイト • 頭2ビットが10であれば2バイト長以上の2バイト目以降 • であることが容易に判別可能.
管理者はともかく, 教師,学生に 半角英数字しか使っちゃだめ! とは言えない 実際,不便ですし... Moodleを介したファイルのやり取りは... • (PDFなどの)配布用ファイル • フォーラムの添付ファイル • 電子メールの添付ファイル • 提出課題の提出物 などなど.
具体例(コースファイル) Explorer (on Windows) 123 TEST1 実践工業数学 123 TEST1 実践工業数学参考文献.txt 半角はOK 全角も全てが化ける訳ではない
Moodle (PHP) 「このデータを “表1.doc”(E8 A1 A8 EF BC 91 2E 64 6F 63 :UTF-8) という名前で保存して」 日本語 「OK. “陦イ・・doc” (E8 A1 A8 EF BC 91 2E 64 6F 63 :S-JIS?) ん? 変な名前だな.」 Explorer (on Windows)
具体例(コースファイル) Explorer (on Windows) 正しい例 (Moodle → fs_moodle)
シフトJIS(CP932)のハズだ!と 勝手に思い込んでしまう ならば... つまり日本語Windowsは... アプリケーションから渡されたファイル名の文字コードが ASCII文字(7bit)ではない場合
それに対して,fs_moodleは... ファイル名をUTF-8から シフトJISに変換してから渡してあげよう (妥協) Moodleソースリスト中のファイルI/O関数を 独自の関数でオーバーライド (UTF-8 ←→ シフトJIS) (膨大な数...やりました)
md5_file() mkdir() move_uploaded_file() opendir() readdir() readfile() rename() rmdir() scandir() sha1_file() unlink() chmod() copy() file() file_exists() file_get_contents() file_put_contents() filectime() filemtime() filesize() filetype() fopen() getimagesize() imagecreatefromgif() imagecreatefromjpg() imagecreatefrompng() imagecreatefromwbmp() imagecreatefromxbm() imagecreatefromxpm() is_dir() is_executable() is_file() is_readable() is_uploaded_file() fs関数:各関数名の頭に fs_ 各関数はファイル名を UTF-8←→シフトJIS変換 例) file_exists(), unlink() function send_temp_file_finished($path) { // (FS_CONVERTER): ここから // if (file_exists($path)) { if (fs_file_exists($path)) { // @unlink($path); @fs_unlink($path); // (FS_CONVERTER): ここまで } }