- 2007年3月11日 02:56
- PC
うちのサーバAyakoは現在Fedora Core 6で動作しているのだが、いわゆる歴史上の経緯というやつで、 文字コードはFedora系でのデフォルト文字コードであるUTF-8ではなくEUC-JPで動作させていた。 新しいFedoraがリリースされインストールを行うと、文字コードをUTF-8からEUC-JPに再設定する必要があるので、 たいした手間ではないとはいえ、いずれはEUC-JPからUTF-8へ文字コードを変更しようと考えていた。
文字コードを変更しようとすると問題になるのが、ファイル名の問題である。AyakoはSambaを動作させて各Windows PC用のファイルサーバとして運用しているため、日本語ファイル名が付いたファイルが大量に格納されていて、 UTF-8化にはなかなか踏み切れなかった。ところが、最近になってファイル名の文字コードを一括して変更できる convmvというスクリプトがあることを知り、これを使えば比較的簡単に文字コードの変更ができそうな感じであったため、 思い切って文字コードの変更に挑戦してみることにした。
convmv自体はFedora Extraレポジトリに含まれていたため、yumを使ってインストールし、 各データディレクトリに対してEUC-JPからUTF-8への文字コード変換を、テスト実行の結果を確認した上で、実行。なお、 convmvのテスト実行で、一部のファイルについてEUC-JPのコードに則っていないという警告を吐いたので、 警告された各ファイルについて対処をする必要があった。convmv実行の後、システムの文字コード設定をUTF-8に変更し、 Samba側の設定もUTF-8に変更。Ayakoを再起動し、各WindowsPCからほぼ正しくファイルが見えることを確認できた。
上で、「ほぼ正しく」なんて書き方をしたのには意味がある。AyakoをUTF-8化した後でWindows PCからAyako上のファイルを表示させたところ、ファイル名やディレクトリ名に含まれる「~」(実際は全角。以下も同様) の書体が変わって妙に粗く表示されていることに気づいた。名前の「~」の書体が変わってしまっていたファイル・ディレクトリについては、 Explorer上では普通にファイルやディレクトリとして見えるものの一部のアプリケーションでは正しくアクセスできない状況が発生し、 単に見た目だけの問題というわけではなく、対処が必要な気配であった。
試しに、名前の「~」の書体が変わってしまっていたファイル・ ディレクトリをExplorer上でリネームすると正しくアクセスできるようになったので、文字コードをUTF-8化した結果、 ファイル名やディレクトリ名としては含まれるべきではない文字に化けてしまっていたらしい。名前の「~」の書体が変わってしまったファイル・ ディレクトリを検索してみたところ1000個以上とかなりの数が存在し、手作業での修正は無茶そうに見えたため、Flexible RenamerやNameryといったWindows上で動作する一括リネームユーティリティを利用してみたのだが、問題のファイル・ ディレクトリを正しく扱えないようで、リネームができないとの警告が出てしまった。
Webを検索してみても解決できそうな情報は発見できず頭を抱えかけてしまったのだが、ふと思いついて、Ayako上でファイル・ ディレクトリを検索し、問題がある名前があれば問題ない名前にリネームすればよいということを思いつき、実行することにした。 上記したように手作業で実行するには対象の数が多すぎるので自動化することにし、 ディレクトリを再帰的に検索して問題の文字を置換した名前にリネームするPerlスクリプトを作成。いきなり実行するのは不安なので、 デフォルトの動作をconvmvと同じようにテストモードとし、オプションをつけたら実際にリネームを行うような仕様にしてみた。 動作テストを行い正しい動作を確認できたため、Ayakoの各公開ディレクトリとバックアップディレクトリについて処理を実行。 リネームされたファイル・ディレクトリについて、Windows PCから正しくアクセスできることを確認できた。
参考までに、作成したPerlスクリプト replace_invalid_letter.plを公開してみる。 Linux上で動作する。Cygwin等、他の環境では使えないと思う。使用法は、
replace_invalid_letter.pl [-x] 対象ディレクトリ
である。-xオプションを付けないとテスト実行となり、リネーム対象のファイル・ディレクトリと、リネーム結果を表示する。なお、 置き換え対象の文字はreplace_invalid_letter.pl内部に直接テーブルとして16進の文字コードで登録されている。 現在、問題がある文字として僕が把握しているのは全角「~」と全角「-」(マイナス)である。 replace_invalid_letter.plを記述している文字コードはUTF-8なので注意が必要かも。
うちでは期待した通りの結果が得られたけれど、他の環境での動作は保証できないので、利用する際には十分テストを行った後、 自己責任にて行って欲しい。
- Newer: 長期休暇突入。
- Older: RD-X6・WZR-RS-G54、ファームウェアアップデート
Comments:0
Trackbacks:0
- TrackBack URL for this entry
- http://www.orio-n.net/cgi-bin/mt/mt-tb.cgi/122
- Listed below are links to weblogs that reference
- サーバ、文字コード変更 from おりおんの戯言