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