• 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

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

  • 相关阅读:
    Shell——2
    Vim-快捷命令
    Shell——1
    linux命令笔记
    小飞机 + zeal 安装
    linux 环境下 假设被cc攻击,请从linux日志文件找出黑客ip地址
    日志文件例子
    最大子列和的四种方法,时间复杂度递减,直至为线性复杂度
    递归很耗内存+多项式求值的两种方法+c语言计时方法
    线代 第六章 二次型
  • 原文地址:https://www.cnblogs.com/lindajia/p/11454476.html
Copyright © 2020-2023  润新知