【问题标题】:What is the standard for text encoding for a JSON REST web api?JSON REST Web api 的文本编码标准是什么?
【发布时间】:2012-06-22 22:54:52
【问题描述】:

我正在使用 MVC4 和一些请求返回文本块构建一个 Web API,这些文本块可以包含换行符、特殊字符、中文和西班牙文文本。我应该如何转义/编码此信息以通过 api 发送?

【问题讨论】:

    标签: json rest encoding asp.net-mvc-4 asp.net-web-api


    【解决方案1】:

    使用 UTF-8 编码文本,使用 JSON 和 HTTP 编码。够了。当您有换行符和其他特殊字符时,HTTP 编码很有用。

    标准来了 http://www.ietf.org/rfc/rfc4627.txt?number=4627

    但您应该知道,不同的 json 格式化程序在特殊情况下可能会产生略有不同的结果,例如在如何编码日期/时间的问题中。

    使用 UTF-8 和 DataContractJsonSerializer 的示例:

            // Create a User object and serialize it to a JSON stream.
            public static string WriteFromObject()
            {
                //Create User object.
                User user = new User("Bob", 42);
    
                //Create a stream to serialize the object to.
                MemoryStream ms = new MemoryStream();
    
                // Serializer the User object to the stream.
                DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(User));
                ser.WriteObject(ms, user);
                byte[] json = ms.ToArray();
                ms.Close();
                return Encoding.UTF8.GetString(json, 0, json.Length);
    
            }
    
            // Deserialize a JSON stream to a User object.
            public static User ReadToObject(string json)
            {
                User deserializedUser = new User();
                MemoryStream ms = new MemoryStream(Encoding.UTF8.GetBytes(json));
                DataContractJsonSerializer ser = new DataContractJsonSerializer(deserializedUser.GetType());
                deserializedUser = ser.ReadObject(ms) as User;
                ms.Close();
                return deserializedUser;
            }
    

    【讨论】:

      【解决方案2】:

      类似这样的使用 UTF-8 编码,作为一个简化的例子

      public JsonResult Find(string term) 
      {
          var items = service.Find(term);
          return Json(items,"application/json; charset=utf-8", JsonRequestBehavior.AllowGet);
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-08-31
        • 2016-04-03
        • 2016-09-06
        • 1970-01-01
        相关资源
        最近更新 更多