unity读取json文件乱码以及Invalid character 'v' in input string异常解决方案
程序员文章站
2022-07-14 23:38:25
...
先说PC端吧,PC端乱码很容易解决
itemsTable = JsonMapper.ToObject(
File.ReadAllText(Application.dataPath + "/Scripts/Json/itemsTable.json", Encoding.GetEncoding("utf-8")));//读取物品表
在JsonMapper.ToObject的第二个参数写上编码格式就行了,
注意,下文中的utf-8编码就是windows系统记事本本的utf-8编码,而其实际上是utf-8 with bom编码.
参数里写GB2312的话在pc上可以读取UTF-8(utf-8 with bom)编码的json,但却不能读取utf-8 无Bom编码的json,如果读取utf-8 无 bom编码的json的话就会报
类似sonException: Invalid character 'v' in input string这种异常
而写utf-8两个都能读取.
而安卓上用www读取json文件的话就只能读取utf-8 无 bom编码的文件了.
而在记事本中保存为json则是保存为utf-8 with bom格式保存.如果你是用记事本保存的json然后又使用www读取的话就会出现
JsonException: Invalid character 'v' in input string这种异常,有也可能是'd',' ',等字符错误
所以解决方案是用notepad++将编码改为utf-8 无 BOM,pc端读取json用
Encoding.GetEncoding("utf-8")
读取,安卓用www类读取,这样pc和安卓都能读取.一下是安卓的读取json.
这里采用最简单的StreamingAssets路径来读取Json.
void Awake()
{
StartCoroutine(LoadJson());
}
IEnumerator LoadJson()
{
string sPath = Application.streamingAssetsPath + "/Json/itemsTable.json";
WWW www = new WWW(sPath);
itemTableStr = www.text;
Debug.Log(itemTableStr);
yield return www;
}
具体原理感谢这位大佬
上一篇: invalid derived query的解决办法
下一篇: Windows安装配置Mycat