私も、ちゃんとわかってないけど、とりあえず...。間違いがいっぱいあるという前提で読んでください。
「自前のグリッドサーバ」ということは、JOGridとは関係ない、自前でRobust.exeを動かしているグリッドということですね。
私も、自前でRobust.exe うごかしてますが、同様に文字化けします。Profileモジュールや、Searchモジュールも、同じで、OSGridも同様に文字化けします。
オフラインメッセージモジュールは、INIファイルで外部モジュールを設定して、いろんな構成をとれるようになっているみたいです。
詳しくは、下記のURLを見てください。
Offline Messaging
http://opensimulator.org/wiki/Offline_Messaging
Offline Instant Messaging v2
http://opensimulator.org/wiki/Offline_Instant_Messaging_v2
Offline Instant Messaging v2 を使うと、PHPで外部サーバーを用意したりしないで、Robust.exeだけで、オフラインメッセージを保存できるようです。しかし、これが日本語通りません。
ソースコードの 「 OpenSim/Addons/OfflineIM/ 」あたりのソースコードが関係しているようなのですが...。あと、bin/XMLRPC.dll がなんとなく関係しているような気もします。
たぶんだけど、bin/XMLRPC.dll は、以下のものをコンパイルしたもののようです。
https://github.com/jhs/libopenmetaverse/tree/master/Programs/GridProxy/XmlRpcCS
これは、次のソースコードをベースに、タイムアウト付け加えたりして、修正したもののような気がします(タイムアウトも、たしか30秒とか決め打ちで書かれていたような気がする。タイムアウトがないと、ビュアーが接続できないとハングしたみたいになるし...)。
http://xmlrpccs.sourceforge.net/
https://github.com/joe1chen/XmlRpcCS
というわけで、INIファイルに設定してなんとかなるという問題ではないように思います...。
JOGridは、これらの文字化けに対応するため、日本語が混じるであろう文字列をBASE-64エンコードして、DB等に保存したりXML-PRCメッセージをやり取りしていて、システムの文字コードセンシティブな問題に引っかかるのを避けています。
また、外部にXML-RPCサーバーが別途必要になります。JOGridの場合、Moodleのヘルパーモジュール(というんだろうか???)でこれを実現しているようです。
C#やこれらの要素技術に詳しい人が、なんとかしてくれると嬉しいのですが...(完全 他力本願モード... ^_^;)。
こんにちは.
JOGではオフラインメッセージは xmlrpc を使用して,PHPでDBを直接操作しています.
Offline Instant Messaging v2 の方はソースコードを見ていませんが,他のソースコードでは結構平気で文字コードをASCIIに限定していたりします.
実際,グループメッセージは文字コードが ASCII になっているのを確認していて,JOGでは UTF-8 に変更するパッチを当てています.
オフラインメッセージを日本語で表示することができました!
あれから、いろいろソースコードみたり、OpenSimのWikiを調べたり、Robustのコンソールで
debug http all 6
とかやってみたり、tcpdump してみたりしてました。ビュアーからオフラインの人にIM送った時のメッセージ文字列は、utf-8のコードが、HTTPのPOSTで application/x-www-form-urlencoded のエンコードで robust.exeに送られてるようで、この時点で「あ」って送ってみると「%e3%81%82」と%エンコードされてれるけど文字コード自体はutf-8のまんまでとどいてました。でも、mysqlに格納する時点で「?」になってしまいます(私はMySQLを使ってます)。
ここで、MySQLに接続するクライアント側のエンコーディング設定が、latin1 のまんまなんじゃないかと、ふと思って、Robust.HG.ini, config-include/GridCommon.ini のMySQLのDBへの接続文字列に、「CharSet=utf8;」を追加してみました。
[DatabaseService]
StorageProvider = "OpenSim.Data.MySQL.dll"
ConnectionString = "Data Source=localhost;Database=mydb;User ID=myname;Password=mypass;Old Guids=true;CharSet=utf8;"
MySQLのデータベースは、utf8をデフォルトにして作成しておきます。
mysql> create database nxgrid default character set utf8;
もしくは、my.cnf の[mysqld]セクションに 「character-set-server=utf8」を追加して、再起動すればいいんじゃないかと思います(<--- 未検証なので自分でちゃんと調べてください!)。
こうすれば、「Offline Instant Messaging v2」では、日本語が表示されました。バンザーイ!
teddyさんも、試してみてください。
ちなみに、ProfileやSearchの方は、まだうまくいってません。
さすがヨーダさん、天才!神様!仏様!?
さっそくテストしてみます!
ありがとうございました。
見事に日本語でオフラインメッセージ残すことができました!
ほんとにありがとうございます!