
日本語ファイル名の利用とバージョン管理
− 次世代プロトコルWebDAVの可能性[後編] −
宮本 久仁男<kmiya@coe.nttdata.co.jp>
NTTデータ COEシステム本部
システム技術開発部第三技術開発担当
2001/10/16
日本語ファイル名問題の解決
中編で構築したWebDAV環境で日本語を含む名前のファイルやフォルダを作ると、画面5のように一見正しく作成されているように見えても、
![]() |
| 画面5 Webフォルダで新規にフォルダを作成 |
フォルダ情報を更新すると画面6のように実は名前が化けていたりすることに気が付くはずだ。この状態でアクセスすると、エラーが発生してそのファイルやフォルダは利用できない。これではいささか具合が悪い。
![]() |
| 画面6 日本語は文字化けしてしまう |
これは、ファイルの作成やファイル名の変更時に、WebDAVサーバに送るファイル名の文字列符号化形式がシフトJISであるのに対し(図5)、WebDAVサーバからクライアントに送られるファイル名の文字列符号化形式はUTF-8なのが直接の原因である。
![]() |
| 図5 WebDAVサーバとクライアントが、それぞれ異なる文字列符号化形式でやりとりしている |
| コラム URLの文字列符号化形式についての補足 |
| クライアントからどのような符号化形式のファイル名文字列を送るかをサーバに通知するための仕組みがないうえに(XMLも関係することから、WebDAVではファイル名文字列の符号化形式についてもUTF-8を推奨していると推測される)、Webフォルダから送出されるファイル名文字列の符号化形式が常にシフトJISであることが元凶である。この部分、RFC 2718においてUTF-8が推奨されている(URIの文字符号化形式の部分)旨が記述されていることもあるが、このようなちぐはぐがないような形で取り扱ってくれればと切に希望する。 |
このような状況を解決するのが、IIJのTaisuke Yamada氏が作成したmod_encodingモジュール(注)である。具体的には、図6のような動作を行う。Yamada氏は本モジュールをIIJ内部で使うために作ったが、会社の許可を得て社外に公開しているとのこと。詳細な使用条件は、モジュールに記述されているので参考にしてほしい。
![]() |
| 図6 mod_encodingにより、文字列符号化形式がUTF-8に統一される |
| 注:mod_encodingが使えない人は、ファイルやフォルダの作成後にフォルダ情報を更新しないで名前を変更するなどして対処してほしい。 |
■mod_encodingのインストール
mod_encodingの導入手順は以下のとおりである。
1.ソースコードの取得
mod_encoding.cはWebDAVのメーリングリスト(dav-dev)で公開されたものであり、これを入手するにはメーリングリストのアーカイブから取得する必要があった。しかし、今回は作者であるTaisuke Yamada氏のご厚意により、mod_encoding.cを転載させていただいた。転載を承諾いただいたTaisuke Yamada氏に感謝いたします。
mod_encoding.cのダウンロード
なお、mod_encoding.cのオリジナルはhttp://www.lyra.org/pipermail/dav-dev/2001-May/002428.htmlにある。
2.コンパイルおよびインストール
$ apxs -c mod_encoding.c |
これで、Apacheのモジュールが格納されているディレクトリにmod_encoding.soが作成される。
3.Apacheの設定
httpd.confファイルを編集して、
LoadModule encoding_module libexec/mod_encoding.so |
という記述を追加することでmod_encodingの機能をApacheに取り込み、
<IfModule mod_encoding.c> |
と記述することで、特定の種類のクライアント(ここではMicrosoft系OSおよびcadaver)のClient Encodingを指定し、適切な処理を行えるようにする。
4.動作確認
ここまでで、日本語ファイル/フォルダ名が扱えるようになっているはずだ。実際に日本語で名前を付けたフォルダやファイルを取り扱った例を画面7に示す。
![]() |
| 画面7 mod_encodingインストール後。日本語のフォルダ/ファイル名が扱えるようになっているのが分かる |
■mod_encoding利用時の注意
mod_encodingは文字コードの取り扱いをiconv()の実装に依存しているため、iconv()がインストールされている必要がある。Linuxについては、最近のディストリビューションで採用しているglibcであれば問題はない(iconv()が入っている)が、そうでないものやiconv()がないOSなどでは、別途libiconvが必要となる。
なお、古いバージョンのglibcを使ったLinuxだったりすると、iconv()の実装が古くてmod_encodingモジュールが正常に機能しないことがある。このような場合は、mod_encoding.cの170行目にある、
iconv(cd,
NULL, NULL, NULL, NULL);
|
の行を丸ごとコメントアウト/無効にすることで取りあえずの対処はできる。しかし、この部分はバッファやステータスのフラッシュを実行する部分とのことなので、glibcのバージョンアップなどで対処する方がよい。
また、iconv()の実装に起因した問題もあるが、それについては後述する。
| 中編へ |
1/3
|
|
||||||
|
||||||
| Linux Square全記事インデックス |
| Linux Squareフォーラム WebDAV関連記事 |
| 特集:次世代プロトコルWebDAVの可能性[前編] 技術仕様徹底解説 将来、SambaやCVSを不要にする可能性を秘めた「WebDAV」。このプロトコルの仕様から実用化までを徹底解説。今回は、技術仕様を明らかにする |
|
| 特集:次世代プロトコルWebDAVの可能性[中編] WebDAVクライアント/サーバ環境の構築 WebDAVの実装はすでに存在する。LinuxによるWebDAVサーバの構築とクライアントの整備を行い、実際に使ってみよう |
|
| 特集:次世代プロトコルWebDAVの可能性[後編] 日本語ファイル名の利用とバージョン管理 日本語ファイル名を扱えるようにするほか、WebDAVの「V」を司るバージョン管理機能を実現。WebDAV解説完結編! |
|
| 特集:WebDAV時代のセキュリティ対策[前編] WebDAVのメソッドは便利な反面、セキュリティホールとなり得る。しかし、適切な対策を講じることでメソッドの危険性は取り除くことができる |
|
| 特集:WebDAV時代のセキュリティ対策[後編] WebDAVの使用に際し、包括的な対策を行っておくのも重要である。何をどのように設定すればよいのかをここで明らかにする |
|
| 特集:Apache
2.0でWebDAV Apache 2.0の正式リリースでWebDAVも新たな段階に入った。一方で、1.3時代のmod_encodingがうまく機能しないという問題も浮上した |
|
| 特集:Subversionによるバージョン管理 DeltaVがRFCとしてリリースされ、WebDAVのバージョン管理機能も足元か固まった。DeltaVの実装である「Subversion」を導入しよう |
|
| Linux Squareフォーラム全記事インデックス |
|
TechTargetジャパン
- 新しい記事も入っていて安心しました (2012/2/7)
Linux Squareのアクセスランキングを公開します。定番の記事ばかりでなく、連載中の記事もよろしくお願いいたします - エラーメッセージをどう扱うか? (2012/2/2)
今回は、スクリプト実行時にエラーが発生したことを知らせるメッセージの扱い方を説明します - ファイルのアップロードを制限する (2012/1/30)
HTTPクライアントがアップロードしてくるファイルの扱いについて解説します。そもそも受け入れる必要があるのか? ということのほかにも、いろいろ設定が必要です - OSに付属するシェルスクリプトを読んで技術を盗む (2012/1/27)
シェルスクリプトマスターに近づくには、他人から技術を盗まなければならない。OS付属のスクリプトから技術を盗もう
|
|
キャリアアップ
スポンサーからのお知らせ
- - PR -
イベントカレンダー
- - PR -





