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
目前这样处理,有其他问题再说
C# InputStream获取后乱码处理的更多相关文章
- EF 连接MySQL 数据库 保存中文数据后乱码问题
EF 连接MySQL 数据库 保存中文数据后乱码问题 采用Code First 生成的数据库,MySQL数据库中,生成的表的编码格式为***** 发现这个问题后,全部手动改成UTF8(图是另一个表的 ...
- extjs DateField 的值用getValue()方法获取后是一大堆字符串,类似Tue Dec 07 2010 00:00:00 GMT 0800,这玩意存入数据库实在不好办。。。
extjs DateField 的值用getValue()方法获取后是一大堆字符串,类似Tue Dec 07 2010 00:00:00 GMT 0800,这玩意存入数据库实在不好办...所以要把它格 ...
- 【转】cygwin中文乱码(打开gvim中文乱码、安装svn后乱码)
想用cygwin less看log,可能包含德语.格式是乱的,很多类似"ESC"之类的乱码. 结果这个解决方案似乎也不错,有排版,有颜色高亮. ------------------ ...
- InputStream 读取中文乱码 扩展
对于InputStream读取中文乱码,下面这段话给出了很好的解释,以及后续编码上的扩展. BufferedInputStream和BufferedOutputStream是过滤流,需要使用已存在的节 ...
- java:常见问题(解决获取properties乱码,解决poi自适应宽度)
1.解决获取properties乱码 File cf = new File("D:\\app\\java_jar\\config.properties"); String[] pa ...
- 【疑难杂症】高版本UG从老UI中获取汉字字符串后乱码的问题
结论:NXstring转换为char类型的时候导致了乱码 措施: 改前:string strA=Test001::test001StrName->ItemValue().GetText(); / ...
- 记一次InputStream引起的乱码
项目上线一周后,正准备看新闻的我突然接到了一个任务.线上突然出现了一条乱码的数据,需要解决这个bug.于是我放下了手中的保温杯,开始解决这个bug.经过一番折腾,发现是有一个同事在处理IO流上写得有点 ...
- cookie保存中文登录账号获取时乱码问题
登录成功后写入cookie的代码 Response.Cookies["account"].Value = account;//"管理员" Response.Co ...
- WebRequest 获取网页乱码
问题:在用WebRequest获取网页源码时得到的源码是乱码. 原因:1,编码不对 解决办法:设置对应编码 WebRequest request = WebRequest.Create(Url);We ...
随机推荐
- mysql 查询a表在b表中不存在的记录
select * from tbl_user a where(select count(1) as cnt from tbl_order b where a.phone=b.phone)=0
- LeetCode No.100,101,102
No.100 IsSameTree 相同的树 题目 给定两个二叉树,编写一个函数来检验它们是否相同. 如果两个树在结构上相同,并且节点具有相同的值,则认为它们是相同的. 示例 输入: 1 1 / \ ...
- php通过身份证判断性别
/** 已测试,百度很多写法不行的 * 1就是男性 2就是女性* 通过身份证获取性别类型* @param type $card* @return int*/function getCardSex($i ...
- spring-mvc基于xml的配置
配置web.xml <!--配置spring-MVC拦截--> <servlet> <servlet-name>DispatcherServlet</serv ...
- spring创建bean异常
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'requestMappi ...
- android形状属性、锁屏密码、动态模糊、kotlin项目、抖音动画、记账app、视频播放器等源码
Android精选源码 直观了解Android的"形状"属性如何影响Drawable的外观. 一个灵活的视频播放器, 可替换播放器内核. android锁屏输入密码功能源码 背景动 ...
- 吴裕雄--天生自然python学习笔记:python爬虫PM2.5 实时监测显示器
PM2.5 对人体的健康影响很大,所以空气中的 PM2.5 实时信息受到越来越多的关注. Python 的 Pandas 套件不但可以自动读取网页中的表格 数据 , 还可对数据进行修改.排序等处理,也 ...
- servlet之间传递数据的方式
Servlet传递数据方式 基本概述 Servlet传递数据的方式有很多,这里提供五种方式: 1.静态变量 2.HttpServletResponse的sendRedirect()方法 3.HttpS ...
- OpenCV Mat - 基本图像容器
Mat 在2001年刚刚出现的时候,OpenCV基于 C 语言接口而建.为了在内存(memory)中存放图像,当时采用名为 IplImage 的C语言结构体,时至今日这仍出现在大多数的旧版教程和教学材 ...
- GitHub下载