Javaのソケット通信

今さらのようにソケット通信のプログラムを**趣味で**書いている。
それも、Windows-Mac間である。
Macで動くiTunesの操作をWindowsからVNC経由でなく、一アプリケーションからできないか、という思い付きからはじめたこのプログラミング。
Windowsのエクスプローラのような外観のアプリで、左にプレイリスト一覧、右側にプレイリストの楽曲情報が表示されるようになっている。
現状では、左側でプレイリストを選んでも反映はしない。それはこれから。
ここで一番問題になっていたのは日本語のプレイリストが正常にMacに送れないということだった。
コマンドや英数字のみのプレイリストは化けないのでそのまま単なる文字列として送信しても期待通りに動くのだが、日本語を送るとMac側でデバッグプリントすると化けている。
文字コード変換(byte[]を使うなど)したが変化なし。
ネット検索で、似たような状況で、URLエンコードで解決したという人がいたのでそのネタをもらうことにした。
URLエンコードとは、例えば検索エンジンでキーに日本語を入れたときに%83とか表示される、あの文字列に変換することである。
確かに、送信側でエンコードし、受信側でデコードすると問題なく送受信できた。
しかし、疑問なのは、今までもそうだったのだが、日本語の曲名などは化けたことがないのである。
Windowsからの送信はString型の文字列をそのまま送信するのだが、Macからの送信は、String型を中心に構成されたオブジェクト(クラス)のArrayListで行っている。
その中に含まれる文字列が化けたことがないのが不思議なのだ。
まぁ、とりあえず問題が一つ解決したので、細かいことは気にせず先に進もう。
一番大きな問題は、300曲クラスのプレイリストの曲一覧が取得できないことなのだが...

コメント