2014年3月14日,星期五, 23点22分

忙碌、焦头烂额、充实而又幸福的一天!

写在篇头的话:

许多时候,别人分享的经验(成功或失败),个中滋味,听者很难真正体会,直到自己遇到的那一瞬间,才会泪如雨下,幡然醒悟......

今天将之前写的MATLAB版本的程序,用C#重新实现。原因嘛,不得不发句牢骚,MATLAB打包成exe后,启动时间都要几十秒甚至一两分钟,真是急死人的节奏啊!(每次给别人演示的时候,双击图标后到要和别人先聊会儿天,无语吧!)

言归正传,遇到的问题是,利用post方法将一些数据提交给服务器的网页中,数据采用base64编码。悲剧发生了:c#版本提交的数据,服务器居然无法进行正确的base64解码!调试后发现,c#端的base64编码完全正确,没有任何问题,相同的数据用MATLAB提交给服务器,服务器完美解码!这是啥情况?难道服务器也欺生么?

显然不是!在万般无奈之下,用PHP(服务器端的网页是用PHP写的哈)自己写了一个base64解码函数(PHP自带的函数是base64_decode,你不是不给我正确答案么?哼!哥还不用你了,走着瞧!),当我以为大功告成时,悲剧再次降临!一部分数据可以正确解码,还有一部分数据依然不对!仔细检查,自己写的解码函数没问题啊,是哪里出错了呢?

经过一步一步调试,终于发现,base64编码后的字符串中经常包含“+”号,在C#环境中发送给服务器后,服务器把“+”号存成了“ ”(空格),而MATLAB发送的数据,服务器依然存为“+”号!找到问题就好办了,服务器解码前,先把字符串中的“ ”替换成“+”号,完美解决!

base64_decode,我错怪你了,sorry!

遗留问题:为什么会出现这种现象呢?目前猜测是与post时的编码方式有关,尚未确诊,继续寻找中......

结束语:

我们经常会遇到各种各样“奇葩”的棘手问题,在这种情况下,千万不要第一时间试图去绕开它,而去寻找替代的解决方案。当你庆幸地以为寻找到一条“捷径”时,可能那个坎还在前方等着你!到最后会发现,其实问题的本质在另外一个地方,只是你还没有发现它!

纠结的一天 —— 由base64编解码与加号、空格引起的更多相关文章

  1. Delphi Base64 编解码函数

    Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...

  2. ios Base64编解码工具类及使用

    为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...

  3. Java实现BASE64编解码

    Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...

  4. Delphi 自带的 Base64 编解码函数

    今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...

  5. openssl命令行Base64编解码

    openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...

  6. python rsa 加密解密 (编解码,base64编解码)

    最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...

  7. python base64 编解码,转换成Opencv,PIL.Image图片格式

    二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...

  8. EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug

    本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...

  9. C++,Base64编解码字符串或文件

    参考链接:在C语言中使用libb64进行Base64编解码 GitHub地址:https://github.com/BuYishi/cpp_base64_demo base64_demo.cpp #i ...

随机推荐

  1. TensorFlow-多层感知机(MLP)

    TensorFlow训练神经网络的4个步骤: 1.定义算法公式,即训练神经网络的forward时的计算 2.定义损失函数和选择优化器来优化loss 3.训练步骤 4.对模型进行准确率评测 附Multi ...

  2. Python入门笔记——(1)数字与表达式

    一.算术运算 整除:// 取余:% 乘方:** (a ** b = pow(a, b)) 十六进制表示:0x...,八进制表示0... round(x [, n]):对x从小数点第n位取四舍五入结果, ...

  3. Promise 多重链式调用

    Promise对象是用于异步操作的. Promise的真正强大之处在于它的多重链式调用,可以避免层层嵌套回调.如果我们在第一次ajax请求后,还要用它返回的结果再次请求呢? 使用Promise,我们就 ...

  4. 负载均衡服务器中存在大量的TIME_WAIT怎么解决

    首先需要明白什么是TIME_WAIT.TIME_WAIT是在tcp断开连接时进行四次回收的时候,主动断开端在收到被动关闭端的FIN包并发送ACK包给被动关闭后进入的状态.这个状态默认情况下是2倍的MS ...

  5. shell中if的可判断的类型

    -d :判断制定的是否为目录-z:判断制定的变量是否存在值-f:判断制定的是否为文件-L:判断制定的是否为符号链接-r:判断制定的是否可读-w:判断制定的是否可写-x:判断存在的对象是否可以执行!:测 ...

  6. URAL 1252 ——Sorting the Tombstones——————【gcd的应用】

    Sorting the Tombstones Time Limit:1000MS     Memory Limit:65536KB     64bit IO Format:%I64d & %I ...

  7. BNU 20860——Forwarding Emails——————【强连通图缩点+记忆化搜索】

    Forwarding Emails Time Limit: 1000ms Memory Limit: 131072KB This problem will be judged on UVA. Orig ...

  8. 转帖:kindeditor编辑区空格被隐藏,导致所见所得不一致的解决办法

    1.修改kindereditor-all.js中的 var re = /(\s)<(/)?([\w-:]+)((?:\s+|(?:\s+[\w-:]+)|(?:\s+[\w-:]+=[^\s&q ...

  9. [转]在ASP.NET Core使用Middleware模拟Custom Error Page功能

    本文转自:http://www.cnblogs.com/maxzhang1985/p/5974429.html 阅读目录 一.使用场景 二..NET Core实现 三.源代码 回到目录 一.使用场景 ...

  10. 使用waitfor 语句

    aitfor语句用于延迟后面语句的执行,可以指定延迟时间长度是具体的时间.参考下面的语句: waitfor delay ’00:01:15’ print N’到时间了’    --也可以不加N 字符串 ...