Max6 は文字コードのエンコーディングに UTF-8 を、Processing は内部的には Java なので UTF-16 を用いているのではと推測されます。そのため Processing 向けのoscP5は、Max6から受け取った UTF-8 の日本語バイト列を toString() すると、UTF-16 として解釈して文字化けしてしまいます(たぶん)。OscMessage や OscArgument のクラスなどひと通りみたのですが、エンコーディングに関するメソッドが見当たりませんでした。
そこで対策ですが、Max6 から受け取った OscMessage の Byte 列を一旦 UTF-8 として String に変換すれば問題が無くなりました。そんなに検証してないので問題あったら教えて欲しいっす!
[java]
void oscEvent(OscMessage theOscMessage) {
//このprintでは日本語の文字化けが確認される。
theOscMessage.print();
//OSCをByte列として取得
byte[] bytes = theOscMessage.getBytes();
try {
//Byte列をUTF-8として解釈
String str = new String(bytes, "UTF-8");
//Addrpatternとtypetagを削除する
String typeTagStr = theOscMessage.typetag();
str = str.substring(str.indexOf(typeTagStr) + typeTagStr.length());
//コンソールにMax6から送った日本語のメッセージが表示される
println("String:"+str);
}
catch(UnsupportedEncodingException e) {
e.printStackTrace();
};
}
}
[/java]