小游戏项目 加载有中文的json文件 报错

我的json文件内容
{"Sheet1":[{"id":"0","name":"张三"},{"id":"1","name":"李四"},{"id":"2","name":"王麻子"},{"id":"3","name":"layabox"}]}
代码
public function LayaUISample() {
//初始化微信小游戏
MiniAdpter.init();

//初始化引擎
Laya.init(600, 400);

var url:String = "res/json/Sheet1.json";
Laya.loader.load(url, Handler.create(null, onJsonLoaded,[url]), null, Loader.JSON);
}

private static function onJsonLoaded(url:String,data:Object):void
{
var arr:Array = data.Sheet1;
Laya.loader.clearRes(url);
}

微信开发者工具中报错
Unexpected token in JSON at position 34;at api readFile success callback function
SyntaxError: Unexpected token in JSON at position 34
已邀请:

jiaxing_0329

赞同来自: Laya_Aaron

找到问题了 json文件的内容 要转换成ASCII编码
{"Sheet1":[{"id":"0","name":"\u5f20\u4e09"},{"id":"1","name":"\u674e\u56db"},{"id":"2","name":"\u738b\u9ebb\u5b50"},{"id":"3","name":"layabox"}]}

layabox

赞同来自: jiaxing_0329

由于小游戏里读本地资源会校验编码,而项目里绝大多数非图片文件的编码为ASCII,所以引擎调用本地接口读取文件时,默认传参会告诉小游戏编码格式为ASCII码,当本地初始包的文件(比如json文件)的编码格式不是ASCII,那就会报错。所以,开发者需要去检查文件的编码,然后通过“MiniAdpter['getUrlEncode']”告诉小游戏该文件真正的编码是什么,这样小游戏按照正确的编码去校验就不会出错了。
//告诉小游戏你的文件编码是什么
MiniAdpter['getUrlEncode'] = getUrlAndEncode;//假如getUrlAndEncode是开发者识别文件编码的方法


开发者识别文件编码的方法示例(AS3版):
//该方法示例仅做参考,视项目情况自行修改或拓展
public static var getUrlAndEncode:Function = function(url:String,type:String):String
{
if (url.indexOf(".fnt") != -1 || url.indexOf("xxx.json") != -1)
{
return "utf8";
} else if (type == "arraybuffer")
{
return "";
}
return "ascii";
}

 

jiaxing_0329

赞同来自:

2.png

1.png
好像中文有问题 英文没问题

linchenrr

赞同来自:

先按照二进制(Loader.BUFFER)类型加载
完成之后获取到data
bytes = new Byte(data);
str = bytes.readUTFBytes(bytes.length);
loader.endLoad(JSON.parse(str));
 
完美绕过引擎编码限制

要回复问题请先

商务合作
商务合作