C# 如何获取UTF-8 JSON
我正在使用LitJSON库,但事情变得有点奇怪 你知道有什么JSON库在转换时保留重音符号吗 以下是测试: test.jsonC# 如何获取UTF-8 JSON,c#,json,litjson,C#,Json,Litjson,我正在使用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 {
[{"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库
非常感谢。您可能使用错误的编码读取文本文件。尝试使用接受编码参数的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
下面是一个用于反序列化字符串的示例:
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);
}
}
使用系统;
使用Newtonsoft.Json;
使用System.Collections.Generic;
公共课程
{
公共静态void Main()
{
//将JSON反序列化为CardData列表
var ob=JsonConvert.DeserializeObject(“[{”id\“:\'CS\u 001\”,“name\”:\'L'Lément\”,“type\”:\'T\”,“{”id\“:“CS\u 002\”,“name\”:“L'range\”,“type\”:“T\”,“{”id\“:“CS\u 003\”,“name\”:“Test\”,“type\”,“type\”:“T\”);
/*
输出将是:
id:CS_001,姓名:L'Lément,类型:TôT
id:CS_002,姓名:L'Range,类型:TôT
id:CS_003,名称:试验,类型:TôT
*/
foreach(ob中的var i){
控制台写入线(i);
}
}
}
//类,该类将保存反序列化的数据
//用于演示瞳孔
公共类卡片数据
{
公共字符串id{get;set;}
公共字符串名称{get;set;}
公共字符串类型{get;set;}
公共重写字符串ToString(){
返回String.Format(“id:{0},名称:{1},类型:{2}”,id,名称,类型);
}
}
尝试使用。您好,谢谢您的回答,我尝试了字节[],但无效。我在mono/unity上,没有找到指定内容类型的位置,谢谢这里的评论,如果您从流中获取json字符串并使用流读取器“ReadToEnd”,那么.net将默认读取为Unicode,而不是数据所在的UTF8,这通常会导致一个灾难性的、无声的bug,这可能很难理解。要解决这个问题,可以在
StreamReader
构造函数上设置编码参数,或者将流读入byte[]
并用Encoding.UTF8.GetString
解码嗨,谢谢你的回答,我尝试了:File.writealText(Application.dataPath+“/database.json”,database.ToString(),Encoding.UTF8);但它保持不变。