zoukankan      html  css  js  c++  java
  • C# InputStream获取后乱码处理

    Post推送过来的数据流获取后部分中文出现乱码,晚上找了好多办法,不如朋友鼎力相助,哈哈哈~不说废话了上代码把

    旧代码基本是网上普遍写法,字段不长用起来不会有乱码情况,但是传送字段一旦过长,超过byte的1024个字节后,中文部分的两个字节恰好卡到这个位置就容易出现 "??"或者其他情况.

    原代码:

    System.IO.Stream s = HttpContext.Request.InputStream;
    if (s == null)
    {
    return Json(ReplyJson.ReplyMes(ErrorEnum.error, new Dictionary<string, object>() { { "msg", "推送json数据为空" } }), JsonRequestBehavior.AllowGet);
    }
    int count = 0;
    byte[] buffer = new byte[s.Length];
    StringBuilder builder = new StringBuilder();
    while ((count = s.Read(buffer, 0, 1024)) > 0)
    {
    builder.Append(Encoding.UTF8.GetString(buffer, 0, count));
    }
    s.Flush();
    s.Close();
    s.Dispose();

    新代码:

    #region 数据流获取
    StringBuilder builder = new StringBuilder();
    using (MemoryStream ms = new MemoryStream())
    {
    //copy以进行后续读取,否则InputStream将被释放,不能操作第二次
    HttpContext.Request.InputStream.CopyTo(ms);

    ms.Seek(0, SeekOrigin.Begin);
    using (StreamReader sr = new StreamReader(ms, Encoding.UTF8))
    {
    builder.Append(sr.ReadToEnd());
    }
    }
    if (string.IsNullOrEmpty(builder.ToString()))
    {
    return Json(ReplyJson.ReplyMes(ErrorEnum.error, new Dictionary<string, object>() { { "msg", "推送json数据为空" } }), JsonRequestBehavior.AllowGet);
    }
    #endregion

    目前这样处理,有其他问题再说

  • 相关阅读:
    redis之通信开销限制redis cluster规模的关键因素
    redis解决秒杀问题与数据倾斜
    codis与redis
    脑裂中的数据丢失
    redis主从同步与故障切换的配置项可能出现的问题
    redi事务机制
    redis并发访问的问题之实现分布式锁
    redis的小功能 bitmaps 发布订阅,HyperLogLog GEO LUA
    redis之api学习
    Ubuntu17.04安装WineQQ7.8及微信
  • 原文地址:https://www.cnblogs.com/lindajia/p/11454476.html
Copyright © 2011-2022 走看看