问题描述:

中小学教育缴费,发送账单到家长支付宝,家长支付成功之后,支付宝回传数据,验签的时候失败了,排查之后发现账单名称乱码了。支付宝回传的时候中文传的是GBK编码格式,但是我接收的是%D5˵%A5%B2%E2%CA%D4这样的,、、很显然不是正常的编码格式,程序也解析不了。

框架用的是.net core 2.0,支付宝的官方文档提供的接收参数的类型,不支持NameValueCollection类型,程序用的是另一种方法。

支付宝官方提供接收参数方法:

        public Dictionary<string, string> GetRequestGet()
{
int i = ;
Dictionary<string, string> sArray = new Dictionary<string, string>();
NameValueCollection coll;
coll = Request.QueryString;
string[] requestItem = coll.AllKeys;
for (i = ; i < requestItem.Length; i++)
{
sArray.Add(requestItem[i], Request.QueryString[requestItem[i]]);
}
return sArray;
}

.net core 用的接收参数方法

        private Dictionary<string, string> GetRequestPost()
{
Dictionary<string, string> sArray = new Dictionary<string, string>();
ICollection<string> requestItem = Request.Form.Keys;
foreach (var item in requestItem)
{
sArray.Add(item, Request.Form[item]);
}
return sArray;
}

当时怀疑是参数处理的问题,然后用下载的官方DOME,去接收回传值,测试之后接收正常。可以确定问题的原因在接收参数这里。看了我的接收参数,我什么也没处理,只是获取了一下而已呀。

解决办法:

            Dictionary<string, string> sArray = new Dictionary<string, string>();
try
{
string jsonData = new StreamReader(Request.Body).ReadToEnd();
var reqParamKvs = jsonData.Split(new char[] { '&' });
reqParamKvs.Where(s => s.Contains("=")).ToList().ForEach(s =>
{
var kv = (s ?? string.Empty).Split(new char[] { '=' });
sArray.Add(kv[], HttpUtility.UrlDecode(kv[], System.Text.Encoding.GetEncoding("GBK")));
});
}
catch
{
return Content("fail");
}

我解决不了,求助老大,他在body的时候就把接收的值截取了,然后查看了接收值,发现这时候还没有乱码,但是body接收的时候已经乱码了。截取之后的值是一个字符串,没办法现在只能自己处理了,按照格式自己截取,虽然麻烦了一点,但是问题也算解决了。

最后也不知道什么原因导致的乱码。猜测是支付宝那边可能处理了,接收的时候识别不了。或者程序接收的时候又处理了。

中小学教育缴费----支付宝回传数据.net core 接收中文乱码的更多相关文章

  1. Transfer-Encoding:chunked 返回数据过长导致中文乱码

    最近在写一个项目的后台时,前端请求指定资源后,返回JSON格式的数据,突然发现在返回的字节数过大时,最后的message中文数据乱码了,对于同一个接口的请求:当数据小时不会乱码,当数据量大了中文就乱码 ...

  2. 使用Kettle抽取数据时,出现中文乱码问题解决方案

    使用Kettle在不同的数据库抽取数据时,有时会出现中文乱码问题:其解决方案如下: 1.查看数据库的字符集是否是UTF-8(最常用的字符集) 2.如果数据库设置正确仍然存在中文乱码,则可能是因为有的客 ...

  3. 关于使用Ajax请求json数据,@RequestMapping返回中文乱码的几种解决办法

    一.问题描述: 使用ajax请求json数据的时候,无论如何返回的响应编码都是ISO-8859-1类型,因为统一都是utf-8编码,导致出现返回结果中文乱码情况. $.ajax({ type:&quo ...

  4. 关于hibernate插入数据到mysql数据库中文乱码问题的解决

    要想解决这个问题就要找到问题的症结所在 1.首先将数据提交到action输出看action里的数据是不是中文乱码,结果很遗憾并不是这里的问题 2.设置数据库连接url: 3.打开mysql安装文件里的 ...

  5. 前台get传递含中文数据到后台出现中文乱码

    博客:(前后台文件编码相同)前台传后台中文乱码 4月4日补充 jsp页面第一句没有下面一句或者页面发布后查看源代码时第一句已经不在了 <%@ page language="java&q ...

  6. JMeter_响应数据为空以及中文乱码

    一.响应数据为空 最近做测试接口,使用同样的请求方式.地址.参数和header,在postman中能正常响应,接收数据的也正常,但是在Jmeter中,虽然响应正常,但是响应数据却为空! Jmeter接 ...

  7. asp.net core输出中文乱码的问题

    摘要 在学习asp.net core的时候,尝试在控制台,或者页面上输出中文,会出现乱码的问题. 问题重现 新建控制台和站点 public class Program { public static ...

  8. net core 控制台中文乱码的解决方案

    net core 对控制台中文的支持需要加入下面的语句 Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);

  9. FusionCharts制作报表使用XML导入数据时出现的中文乱码问题

    今天在使用FusionCharts制作报表时用XML导入数据,总是出现乱码问题,下面是我的解决方案. 让FusionCharts支持中文 刚刚将XML导入到html中后,在火狐浏览器一直报Invali ...

随机推荐

  1. SQL Server连接错误1326

    全新的SQL Server 2017,在2018年末才安装上,不过使用它来管理并不复杂的几张表,占用相对较多服务器资源,确实是有些大材小用. 无论如何,安装还是比较顺利.记得2012年第一次安装SQL ...

  2. WPF腾讯视频通话开发

    一.IntPtr.HandleC#中的IntPtr类型称为“平台特定的整数类型”,它们用于本机资源,如窗口句柄. 1.WPF窗口句柄IntPtr wnip = new System.Windows.I ...

  3. java 获取系统当前时间并格式化

      java 获取系统当前时间并格式化 CreateTime--2018年5月9日11:41:00 Author:Marydon 实现方式有三种 updateTime--2018年7月23日09点32 ...

  4. 关于redis中SDS简单动态字符串

    1.SDS 定义 在C语言中,字符串是以’\0’字符结尾(NULL结束符)的字符数组来存储的,通常表达为字符指针的形式(char *).它不允许字节0出现在字符串中间,因此,它不能用来存储任意的二进制 ...

  5. Swift 计算三角形角度、两条边夹角

    /// 计算三点之间的角度 /// /// - Parameters: /// - p1: 点1 /// - p2: 点2(也是角度所在点) /// - p3: 点3 /// - Returns: 角 ...

  6. css table样式

    1.table样式首先设置表格边框,属性设置表格的边框是否被合并为一个单一的边框. table{ border-collapse: collapse; border-spacing: 0;} 2.固定 ...

  7. Verilog TestBench Coding Style

    Abtract 关于编写testbench的一些经验总结心得. Introduction 1.基本的Testbench结构 1)常用的编码结构 `timescale 1 ns / 1 ps       ...

  8. JVM 内部原理(一)— 概述

    JVM 内部原理(一)- 概述 介绍 版本:Java SE 7 图中显示组件将会从两个方面分别解释.第一部分涵盖线程独有的组件,第二部分涵盖独立于线程的组件(即线程共享组件). 目录 线程独享(Thr ...

  9. ODbgScript 2.01帮助文档

    -------------------------------ODbgScript original pluginhttp://github.com/odbgscript--------------- ...

  10. Android 测试入门之---Monkey test

    这周重点学习的也是Android monkey test 的一些相关知识,也对其进行了初步的操作和试验.讲学习资料整理如下 : Monkey是一个命令行工具 ,可以运行在模拟器里或实际设备中.它向系统 ...