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

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

  • 相关阅读:
    洛谷P1175 表达式的转换
    洛谷P1725 琪露诺
    bzoj1047 [HAOI2007]理想的正方形
    洛谷P1886 滑动窗口
    最大数的和
    bzoj1087 [SCOI2005]互不侵犯King
    bzoj1051 [HAOI2006]受欢迎的牛
    Android(java)学习笔记41:Map集合功能概述
    Android(java)学习笔记40:WindowManager 中LayoutParams的各种属性
    Android(java)学习笔记39:Android 修改字体
  • 原文地址:https://www.cnblogs.com/lindajia/p/11454476.html
Copyright © 2011-2022 走看看