先說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;
}
具體原理感謝這位大佬