日本語Windowsとモバイル機器に強い fs_moodleパッケージの紹介 Introduce of fs_moodle package 鈴鹿工業高等専門学校 機械工学科 (Suzuka National College of Technology, Mechanical Engineering) 白井 達也 (Tatsuya SHIRAI) [email protected] fs_moodle(エフエス・ムードル)とは? 日本語Windows OSが抱える File System の問題点(仕様)を 解決するための仕組み (fsconverter.phpからスタート) もう少しだけ詳しく,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含む)には 致命的な問題点のあることが, 「使ってみてから判明」 「あ,それは仕様です」 名前に日本語を含む ファイルやフォルダが 使えない! 議事録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) Unicode (UTF-8) Unicode(主に16ビット)を 1~3バイトで表す可変長の符号化法 • 頭1ビットが0であれば1バイト長 • 頭3ビットが110であれば2バイト長の先頭バイト • 頭4ビットが1110であれば3バイト長の先頭バイト • 頭2ビットが10であれば2バイト長以上の2バイト目以降 であることが容易に判別可能. ASCII文字列 → UTF-8(1バイト)は完全に同一 → 日本語文字化けの主要因!(海外製ソフトウェア) 日本語文字は必ず3バイトを要する. MoodleはUTF-8に対応済み (見落し有り...) Moodleを介したファイルのやり取りは... •(PDFなどの)配布用ファイル •フォーラムの添付ファイル •電子メールの添付ファイル •提出課題の提出物 などなど. 管理者はともかく, 教師,学生に 半角英数字しか使っちゃだめ! とは言えない 実際,不便ですし... 具体例(コースファイル) Explorer (on Windows) 123 TEST1 実践工業数学 123 半角はOK 全角も全てが化ける訳ではない TEST1 実践工業数学参考文献.txt Explorer (on Windows) 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) 正しい例 (Moodle → fs_moodle) 表 1 . d o c UTF-8 E8 A1 A8 EF BC 91 2E 64 6F 63 (S-JIS) 陦 イ ・ ・ d o c UTF-16 96 66 FF 69 30 FB 30 FB 00 64 00 6F 00 63 陦 イ ・ ・ d o c (S-JIS) E8 A1 A8 81 45 81 45 64 6F 63 UTF-8 表 (?) E (?) E d o c つまり日本語Windowsは... アプリケーションから渡されたファイル名の文字コードが ASCII文字(7bit)ではない場合 シフトJIS(CP932)のハズだ!と 勝手に思い込んでしまう ならば... それに対して,fs_moodleは... ファイル名をUTF-8から シフトJISに変換してから渡してあげよう (妥協) Moodleソースリスト中のファイルI/O関数を 独自の関数でオーバーライド (UTF-8 ←→ シフトJIS) (膨大な数...やりました) md5_file() chmod() mkdir() copy() fs関数:各関数名の頭に fs_ move_uploaded_file() file() opendir() file_exists() readdir() file_get_contents() 各関数はファイル名を readfile() file_put_contents() UTF-8←→シフトJIS変換 rename() filectime() rmdir() filemtime() scandir() filesize() 例) file_exists(), unlink() sha1_file() filetype() unlink() fopen() getimagesize() function send_temp_file_finished($path) { imagecreatefromgif() // (FS_CONVERTER): ここから imagecreatefromjpg() // if (file_exists($path)) { imagecreatefrompng() imagecreatefromwbmp() if (fs_file_exists($path)) { imagecreatefromxbm() // @unlink($path); imagecreatefromxpm() @fs_unlink($path); is_dir() is_executable() // (FS_CONVERTER): ここまで is_file() is_readable() is_uploaded_file() } } Moodle (UTF-8) fs_moodle (UTF-8) 表1.doc 表1.doc fs関数 PHP ファイルI/O関数 日本語 Windows HDD (UTF-16) PHP 日本語 Windows HDD (UTF-16) ファイルI/O関数 Moodle (UTF-8) fs_moodle (UTF-8) 表1.doc 表1.doc UTF-8 ↓ S-JIS PHP 日本語 Windows S-JIS ↓ UTF-16 ファイルI/O関数 表1.doc 陦ィ・・doc HDD (UTF-16) fs関数 ファイルI/O関数 PHP 日本語 Windows S-JIS ↓ UTF-16 表1.doc 表1.doc HDD (UTF-16) Moodle (UTF-8) fs_moodle (UTF-8) 表1.doc 表1.doc UTF-8 ↓ S-JIS PHP 日本語 Windows S-JIS ↓ UTF-16 ファイルI/O関数 表1.doc 陦ィ・・doc HDD (UTF-16) 陦ィ・・doc fs関数 ファイルI/O関数 PHP 日本語 Windows S-JIS ↓ UTF-16 表1.doc 表1.doc HDD (UTF-16) 表1.doc
© Copyright 2024 ExpyDoc