連載
» 2001年10月16日 00時00分 UPDATE

次世代プロトコルWebDAVの可能性(3):日本語ファイル名の利用とバージョン管理 (1/3)

中編でWebDAV環境を構築したが、このままでは日本語ファイル/フォルダ名が使えないなど、多少問題がある。そこで、この問題を解決しつつ、さらにWebDAVを活用するための運用方法を模索する。

[宮本久仁男,株式会社NTTデータ]

日本語ファイル名問題の解決

 中編で構築したWebDAV環境で日本語を含む名前のファイルやフォルダを作ると、画面5のように一見正しく作成されているように見えても、

画面5 Webフォルダで新規にフォルダを作成 画面5 Webフォルダで新規にフォルダを作成

フォルダ情報を更新すると画面6のように実は名前が化けていたりすることに気が付くはずだ。この状態でアクセスすると、エラーが発生してそのファイルやフォルダは利用できない。これではいささか具合が悪い。

画面6 日本語は文字化けしてしまう 画面6 日本語は文字化けしてしまう

 これは、ファイルの作成やファイル名の変更時に、WebDAVサーバに送るファイル名の文字列符号化形式がシフトJISであるのに対し(図5)、WebDAVサーバからクライアントに送られるファイル名の文字列符号化形式はUTF-8なのが直接の原因である。

図5 WebDAVサーバとクライアントが、それぞれ異なる文字列符号化形式でやりとりしている 図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に統一される 図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のオリジナルはhttp://www.lyra.org/pipermail/dav-dev/2001-May/002428.htmlにある。

2.コンパイルおよびインストール

$ apxs -c mod_encoding.c
$ su root
# apxs -i mod_encoding.so 

 これで、Apacheのモジュールが格納されているディレクトリにmod_encoding.soが作成される。

3.Apacheの設定

 httpd.confファイルを編集して、

LoadModule encoding_module libexec/mod_encoding.so
AddModule mod_encoding.c 

という記述を追加することでmod_encodingの機能をApacheに取り込み、

<IfModule mod_encoding.c>
  EncodingEngine on
  SetServerEncoding UTF-8
  AddClientEncoding SJIS "Microsoft .* DAV"
  AddClientEncoding SJIS "xdwin9x/"
  AddClientEncoding EUC-JP "cadaver/"
</IfModule> 

と記述することで、特定の種類のクライアント(ここではMicrosoft系OSおよびcadaver)のClient Encodingを指定し、適切な処理を行えるようにする。

4.動作確認

 ここまでで、日本語ファイル/フォルダ名が扱えるようになっているはずだ。実際に日本語で名前を付けたフォルダやファイルを取り扱った例を画面7に示す。

画面7 mod_encodingインストール後。日本語のフォルダ/ファイル名が扱えるようになっているのが分かる 画面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|2|3 次のページへ

Copyright© 2016 ITmedia, Inc. All Rights Reserved.

@IT Special

- PR -

TechTargetジャパン

素材感が溢れるツートンカラーの「VAIO C15」、プレゼント!

この記事に関連するホワイトペーパー

編集部からのお知らせ

@IT編集部では、編集記者を募集しています。ご興味のある方は奮ってご応募ください。

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。