unity读取json文件乱码以及Invalid character 'v' in input string异常解决方案
·
先说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;
}具体原理

感谢这位大佬
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐


所有评论(0)