如何获得 UTF-8 JSON
How to get a UTF-8 JSON
我正在使用 LitJSON 库,但事情变得有点奇怪。
您知道任何 JSON 库在转换时保留重音符号吗?
这是测试:
test.json
[{"id":"CS_001","name":"L'élément","type":"Tôt"},{"id":"CS_002","name":"L'outrage","type":"Tôt"},{"id":"CS_003","name":"Test","type":"Tôt"}]
test.cs
public class test : MonoBehaviour {
private string jsonString;
private JsonData cardData;
JsonData database;
void Start () {
jsonString = File.ReadAllText (Application.dataPath + "/test.json");
cardData = JsonMapper.ToObject (jsonString);
database = JsonMapper.ToJson (cardData);
Debug.Log (database.ToString ());
}
}
然后 Debug.Log 变成:
[{"id":"CS_001","name":"L'\u00E9l\u00E9ment","type":"T\u00F4t"},{"id":"CS_002","name":"L'outrage","type":"T\u00F4t"},{"id":"CS_003","name":"Test","type":"T\u00F4t"}]
知道如何获得合适的 Json 吗?即使它与另一个 JSON 图书馆。
非常感谢。
您可能使用错误的编码读取文本文件。尝试使用 overload for File.ReadAllText 接受编码参数并将其传递给 UTF8.
内容类型:application/json; charset=utf-8 指定内容为 JSON 格式,以 UTF-8 字符编码编码。 JSON 的默认编码是 UTF-8。在这种情况下,接收服务器显然不知道它正在处理 UTF-8 编码的 JSON,您可能需要手动转换它:
byte[] encodedBytes = Encoding.UTF8.GetBytes(jsonString);
Encoding.Convert(Encoding.UTF8, Encoding.Unicode, encodedBytes);
或者尝试根据您的要求指定内容类型:
content-type: application/json; charset=utf-8
这是一个使用 Json.Net 反序列化字符串的示例:
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
// Deserialize the JSON into a list of CardData
var ob = JsonConvert.DeserializeObject<List<CardData>>("[{\"id\":\"CS_001\",\"name\":\"L'élément\",\"type\":\"Tôt\"},{\"id\":\"CS_002\",\"name\":\"L'outrage\",\"type\":\"Tôt\"},{\"id\":\"CS_003\",\"name\":\"Test\",\"type\":\"Tôt\"}]" );
/*
The output will be:
id: CS_001, name: L'élément, type: Tôt
id: CS_002, name: L'outrage, type: Tôt
id: CS_003, name: Test, type: Tôt
*/
foreach(var i in ob){
Console.WriteLine(i);
}
}
}
// Class that will hold the deserialized data
// For demo puposes
public class CardData
{
public string id { get; set; }
public string name { get; set; }
public string type { get; set; }
public override string ToString(){
return String.Format("id: {0}, name: {1}, type: {2}",id, name, type);
}
}
我正在使用 LitJSON 库,但事情变得有点奇怪。
您知道任何 JSON 库在转换时保留重音符号吗?
这是测试:
test.json
[{"id":"CS_001","name":"L'élément","type":"Tôt"},{"id":"CS_002","name":"L'outrage","type":"Tôt"},{"id":"CS_003","name":"Test","type":"Tôt"}]
test.cs
public class test : MonoBehaviour {
private string jsonString;
private JsonData cardData;
JsonData database;
void Start () {
jsonString = File.ReadAllText (Application.dataPath + "/test.json");
cardData = JsonMapper.ToObject (jsonString);
database = JsonMapper.ToJson (cardData);
Debug.Log (database.ToString ());
}
}
然后 Debug.Log 变成:
[{"id":"CS_001","name":"L'\u00E9l\u00E9ment","type":"T\u00F4t"},{"id":"CS_002","name":"L'outrage","type":"T\u00F4t"},{"id":"CS_003","name":"Test","type":"T\u00F4t"}]
知道如何获得合适的 Json 吗?即使它与另一个 JSON 图书馆。
非常感谢。
您可能使用错误的编码读取文本文件。尝试使用 overload for File.ReadAllText 接受编码参数并将其传递给 UTF8.
内容类型:application/json; charset=utf-8 指定内容为 JSON 格式,以 UTF-8 字符编码编码。 JSON 的默认编码是 UTF-8。在这种情况下,接收服务器显然不知道它正在处理 UTF-8 编码的 JSON,您可能需要手动转换它:
byte[] encodedBytes = Encoding.UTF8.GetBytes(jsonString);
Encoding.Convert(Encoding.UTF8, Encoding.Unicode, encodedBytes);
或者尝试根据您的要求指定内容类型:
content-type: application/json; charset=utf-8
这是一个使用 Json.Net 反序列化字符串的示例:
using System;
using Newtonsoft.Json;
using System.Collections.Generic;
public class Program
{
public static void Main()
{
// Deserialize the JSON into a list of CardData
var ob = JsonConvert.DeserializeObject<List<CardData>>("[{\"id\":\"CS_001\",\"name\":\"L'élément\",\"type\":\"Tôt\"},{\"id\":\"CS_002\",\"name\":\"L'outrage\",\"type\":\"Tôt\"},{\"id\":\"CS_003\",\"name\":\"Test\",\"type\":\"Tôt\"}]" );
/*
The output will be:
id: CS_001, name: L'élément, type: Tôt
id: CS_002, name: L'outrage, type: Tôt
id: CS_003, name: Test, type: Tôt
*/
foreach(var i in ob){
Console.WriteLine(i);
}
}
}
// Class that will hold the deserialized data
// For demo puposes
public class CardData
{
public string id { get; set; }
public string name { get; set; }
public string type { get; set; }
public override string ToString(){
return String.Format("id: {0}, name: {1}, type: {2}",id, name, type);
}
}