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;
       
    }
具體原理



感謝這位大佬大哭

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章