2007年05月10日
にほんごであそうぼう
SecondLife日本語版、日本語版と、何かと引き合いに出されたりします。
本家の登録フォームが英語だけだったり、クライアントが誤訳だらけのままで紛らわしかったりと、確かに微妙ですが、個人的にはまぁ問題はありません。日本人オンリーサーバーとかにはならないでしょうし望んでもいません。
しかし。1つ対応してもらいたい事があります。LSL内に日本語を置きたい…。もちろん、日本語文字列解析(関数)も。これ入らなかったらJAROに訴えてやるー!
あ、JAROは日本だけか。
まぁそんな感じですが、一応無理矢理日本語を扱えなくもないです。
全部1byte文字に置き換えちゃえばいいんですね。
そのための方法は、LSLではとりあえず2通り存在します。メールなどで使われるBASE64ってのと、ブラウザのURLなどで使われるURLエンコードって方法。
本家の登録フォームが英語だけだったり、クライアントが誤訳だらけのままで紛らわしかったりと、確かに微妙ですが、個人的にはまぁ問題はありません。日本人オンリーサーバーとかにはならないでしょうし望んでもいません。
しかし。1つ対応してもらいたい事があります。LSL内に日本語を置きたい…。もちろん、日本語文字列解析(関数)も。これ入らなかったらJAROに訴えてやるー!
あ、JAROは日本だけか。
まぁそんな感じですが、一応無理矢理日本語を扱えなくもないです。
全部1byte文字に置き換えちゃえばいいんですね。
そのための方法は、LSLではとりあえず2通り存在します。メールなどで使われるBASE64ってのと、ブラウザのURLなどで使われるURLエンコードって方法。
string m64 = "44OG44K544OI"; //"tesuto"
string mEsc = "%E3%83%86%E3%82%B9%E3%83%88";
default{
state_entry(){
llOwnerSay("base64: "+llBase64ToString(m64)+
" esc: "+llUnescapeURL(mEsc));
}
}
これで一応日本語で発言する事ができましたね。
で、SL内で日本語から1byte文字列に変換するためには、listen で発言を拾う事で出来ます。
default{
state_entry(){
llListen(0, "", llGetOwner(), "");
}
listen(integer ch, string name, key id, string mes){
llOwnerSay(mes+" base64: "+llStringToBase64(mes)+
" esc: "+llEscapeURL(mes));
}
}
これで吐きだされた文字列をLSL内にコピーすればいい訳ですね。
この用途の場合、変換後の文字数が少ないbase64の方が有利です。
ただし。日本語文字列はこれで一応扱えた訳ですが、たとえば文字列から単語を検索したり、文字列を抜き出してくっつけたりするような操作を行おうとすると問題が出てきます。複雑な事はまだやらない方が懸命ですね。
補足として。
ノートカードには日本語が記述できますが、LSLから読もうとしても空の文字列としか読めず、使えません。
httpで外部からテキストを読み込む事は可能ですが、日本語を扱う場合はエンコードされた状態である必要があります。
個人的には、日本語コメントを書けないのが辛かったところ。
Posted by ともねこ at 10:22│Comments(0)
│スクリプト