XNap で日本語ファイル名

内輪のファイル交換用に、Mac でも Windows でも Linux でも使えるソフトはないかと探していて、Java で実装された OpenNap クライアント XNap がいいらしいということで、テスト。

ローカルで opennap サーバを起動して LAN 内の Windows マシンと Linux マシンでファイル共有してみたんですが、互いに相手の持ってるファイルのファイル名が化けて、検索もダウンロードもできません。

どうも Linux (Fedora Core)は UTF-8 のファイル名、Windows は MS932 のファイル名でやりとりしようとしてコケてるようです。Java の起動オプションで -Dfile.encoding=MS932 とかしてみたけどダメ。調べてみると napsterプロトコルってバイナリの部分があるので、XNap の内部でもバイト列のパケットを作って流していました。文字列からバイト列への変換で引数なしの getBytes() を使っているので、デフォルトロケールエンコーディングに変換されてしまうのが問題。

それっぽいところを全部 getBytes("MS932") に置き換えたりしてなんとかファイルのブラウズとやりとりはできるようになりました。チャットも日本語でオッケー。でも検索がヒットしたりしなかったりなんか変。元からこんなんだっけ?

ということで、改造済みのバイナリ(xnap.jar)とパッチを公開しておきます。

ちなみに OpenNap 接続の WinMX とのファイル共有もできました。