で持ってソースの修正である。Subsonicはちょっと前まで日本語で表示することも出来なかったぐらいなので、ファイルのダウンロードにいたっては化けてて出くる。
直すべきファイルは一つだけ。
subsonic-4.6-src/subsonic-main/src/main/java/net/sourceforge/subsonic/controller/DownloadController.java
直す箇所は4箇所
- メソッド downloadFile
DownloadController.java
// 2012/06/16 mod 文字化け対応 start
// response.setHeader("Content-Disposition", "attachment; filename=\"" + file.getName() + '\"');
String fileName = new String(file.getName().getBytes("MS932"), "ISO-8859-1");
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + '\"');
// 2012/06/16 mod 文字化け対応 end
- メソッド downloadFiles
DownloadController.java
// 2012/06/16 mod 文字化け対応 start
// String zipFileName = dir.getName() + ".zip";
String zipFileName = new String(dir.getName().getBytes("MS932"), "ISO-8859-1") + ".zip";
// 2012/06/16 mod 文字化け対応 end
・・・中略・・・
ZipOutputStream out = new ZipOutputStream(response.getOutputStream());
// 2012/06/16 add 文字化け対応 start
out.setEncoding("MS932");
// 2012/06/16 add 文字化け対応 end
- メソッド downloadDirectory
DownloadController.java
// 2012/06/16 mod 文字化け対応 start
// String zipFileName = file.getName() + ".zip";
String zipFileName = new String(file.getName().getBytes("MS932"), "ISO-8859-1") + ".zip";
// 2012/06/16 mod 文字化け対応 end
・・・中略・・・
ZipOutputStream out = new ZipOutputStream(RangeOutputStream.wrap(response.getOutputStream(), range));
// 2012/06/16 add 文字化け対応 start
out.setEncoding("MS932");
// 2012/06/16 add 文字化け対応 end
- メソッド downloadPlaylist
DownloadController.java
// 2012/06/16 mod 文字化け対応 start
// String zipFileName = playlist.getName().replaceAll("(\\.m3u)|(\\.pls)", "") + ".zip";
String zipFileName = new String(playlist.getName().replaceAll("(\\.m3u)|(\\.pls)", "").getBytes("MS932"), "ISO-8859-1") + ".zip";
// 2012/06/16 mod 文字化け対応 end
・・・中略・・・
ZipOutputStream out = new ZipOutputStream(RangeOutputStream.wrap(response.getOutputStream(), range));
// 2012/06/16 add 文字化け対応 start
out.setEncoding("MS932");
// 2012/06/16 add 文字化け対応 end
modは//でコメントアウトしている部分を下の行で書き換え。addはそこに追加したってこと。
ソースを直したらコンパイル。やり方は↓で紹介したとおり、 mavenで行う。
Subsonic構築への道 その5(Subsonic 導入 ソースコンパイル編)
ごっそり、warを再配備しても、良いのかも知れないが(駄目?)、classファイルだけ置き換えるだけで修正は反映される。
コンパイルすると subsonic-4.6-src/subsonic-main/target/classes/
配下にclassファイルができているので、それをコピーする。
$ cp subsonic-4.6-src/subsonic-main/target/classes/net/sourceforge/subsonic/controller/DownloadController.class /var/lib/tomcat6/webapps/subsonic/WEB-INF/classes/net/sourceforge/subsonic/controller/DownloadController.class
-rw-r--r-- 1 tomcat6 tomcat6 2687 6月 10 23:54 DonateController.class
-rwxrw-r-- 1 xxxxxxx xxxxxxx 14664 6月 20 19:31 DownloadController.class
まあ、別にこのままでも良いけど、何か気持ち悪いので所有ユーザ、グループを変更。
$ sudo chown tomcat6:tomcat6 /var/lib/tomcat6/webapps/subsonic/WEB-INF/classes/net/sourceforge/subsonic/controller/DownloadController.class
アクセス権限も変更。
$sudo chmod 644 /var/lib/tomcat6/webapps/subsonic/WEB-INF/classes/net/sourceforge/subsonic/controller/DownloadController.class
-rw-r--r-- 1 tomcat6 tomcat6 2491 6月 10 23:54 DBController.class
-rw-r--r-- 1 tomcat6 tomcat6 2687 6月 10 23:54 DonateController.class
tomcatを再起動。
$ sudo service tomcat6 restart
めでたくファイル名が文字化けせず、ダウンロードできる。確認としては4つ。
- 右上のフレームから「全て追加」の右隣の「ダウンロード」で化けないか?
- 右上のフレームのアルバムリストから「D」ダウンロードのアイコンボタンを押下してのダウンローで化けないか?
- 右下のプレイリストからプルダウンのプレイリスト操作の下「ダウンロード」操作で化けないか?
- 右下のプレイリストからチェックボックスで選択曲をチェックし、プルダウンの曲目の選択の下「ダウンロード」操作で化けないか?
これらで化けなきゃオッケー(画像は足りてないが…化けてないことは確認)
ただ、今流行(?)の韓国語(というか外国語)は文字化けしてしまう。更に他のOS(Ubuntu)だと文字化けを起こす…まあ、圧倒的なシェアを誇るのWindowsに合わせる結果にしたわけで・・・
まあ、直すべきところは分かったので時間があったら、OS対応、多国語対応な方法を考えてみるか…まあ、ある程度満足できる状態になったの20ユーロ寄付した。
追記: 2013-06-29
UTF-8でダウンロードできるようにしました。
Subsonic、ファイルダウンロードをUTF-8で
追記ここまで