Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何获取UTF-8 JSON_C#_Json_Litjson - Fatal编程技术网

C# 如何获取UTF-8 JSON

C# 如何获取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 {

我正在使用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库


非常感谢。

您可能使用错误的编码读取文本文件。尝试使用接受编码参数的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);但它保持不变。