Unity3D的Json里传中文的解决办法。如果传过来的数据中带中文,执行到var jsonObj1=eval_r(get);,这一步的时候就会出错。原因是unity3d不支持\u转义,而json_encode函数在encode的时候就直接把中文变成了\?这种形式。
其实很好解决,echo之前先把转义的字符串变成中文就行了。Unity3D不是浏览器,应该调用WWW的时候直接读的二进制数据,所以不会出错。
php代码:
<?php
$arr=array(
'username' => '测试',
'password' => 'bar'
);
echojs_(json_encode($arr));
function js_($str)
{
$ret = '';
$len = strlen($str);
for ($i = 0; $i < $len; $i++)
{
if ($str[$i] == '\\' && $str[$i+1] == 'u')
{
$val = hexdec(s str($str, $i+2, 4));
if ($val < 0x7f) $ret .= chr($val);
else if($val < 0x800) $ret .= chr(0xc0|($val>>6)).chr(0x80|($val&0x3f));
else $ret .= chr(0xe0|($val>>12)).chr(0x80|(($val>>6)&0x3f)).chr(0x80|($val&0x3f));
$i += 5;
}
else $ret .= $str[$i];
}
return $ret;
}
?>
Unity JS代码:
var jsonURL="http://localhost/json/demo.php";
var show;
var chineseSkin : GUISkin;
function Start(){
//获取json数据的方法
var getwww : WWW = new WWW (jsonURL);
yield getwww;
print (get);
var jsonObj1=eval_r(get);
print (jsonObj1["username"]);
show=jsonObj1["username"];
}
function OnGUI(){
GUI.skin=chineseSkin;
GUI.Button(Rect(10,10,100,20),show);
}
需要字体才能显示出中文。另外注意.php文件的编码要设置成utf-8,=的js文件编码最好也设置成utf8。