欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

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',' ',等字符错误

unity读取json文件乱码以及Invalid character 'v' in input string异常解决方案


所以解决方案是用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;
       
    }
具体原理


unity读取json文件乱码以及Invalid character 'v' in input string异常解决方案

感谢这位大佬unity读取json文件乱码以及Invalid character 'v' in input string异常解决方案