2005年6月15日水曜日

Sambaでファイル名の「~」(波線、ニョロ、wave dash)が文字化けする件について

最近、職場で、古いSPARCサーバで実行されているネットワークサービスを、どんどんとFreeBSDへ移している。これは、先日、FreeBSDでSambaサーバを動かしたときのお話。

正式運用前にテスト用として、自分でFreeBSDでsambaをけっこう長い間、使いつづけていたけど、バージョン3にしたころから、なんとなく、ファイル名が文字化けすることがあることに気がついていた(見ないことにしていた)。

smb.confは、UNIXのファイルシステム上では、ファイル名にEUC-JPを使うように設定。
display charset = CP932
unix charset = EUC-JP
dos charset = CP932


いつまでも見なかったことにしておくわけにはいかないので、じっくりと症状をしらべると、

    ~ (波線、ニョロ、wave dash)

が文字化けするきっかけになっていることが判明。~の1文字が3バイトのデータに置き換えられている。調べてみると、1バイト目が、EUC-JPでJIS補助漢字のテーブルへ移行するときにつくプレフィックスみたいなもので、そのあとの2バイトが、「~」をさすものであった。

UNICODEのWAVE DASH問題のことは、なんとなく知っていたので、それを手がかりにさらにgoogleする。このへんが、参考になった。

http://ange.ne.jp/naco/adiary/log/200501.html#d20050117013100
http://www.fkimura.com/samba1.html

さて、そこで、どうすればいいかということで、FreeBSDのportsをじっくりとみてみると、2005-6-14現在では、以下のような方法が正解らしい。


��. libiconvのインストール時にWITH_EXTRA_PATCHESをつける

ports/converters/libiconv を 「make WITH_EXTRA_PATCHES=yes」してインストールすると、
iconvで、「EUCJP-MS」というコーディング名が使用可能になる。
こんな風にして、確認できる。
% iconv -l | grep EUCJP-MS
EUC-JP-MS EUCJP-MS EUCJP-OPEN EUCJP-WIN


��. smb.confで、charsetにEUCJP-MSを指定する
display charset = CP932
unix charset = EUCJP-MS
dos charset = CP932


以上。

ネット上の情報では、EUC-JPと指定する方法だけが紹介されていたり、EUCJP-MSの場合でもLinuxの場合の情報だったりで、FreeBSDの場合にズバリそれだという解決方法が見つかるまで、ちょっと手間がかかりました。

P.S.
EUCJP-MSに(かなり婉曲的に)関連して、FreeBSDの別のportsでナニなことになってることに気がついたけど、詳しいことはここでは書かない。半分解決して、半分はどうしようかね、という感じ。

EUCJP-MSは、結局は、Microsoft Windowsの実装が悪い、ということにしていいんですよね?


0 件のコメント:

コメントを投稿