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. C++ GUI Qt4编程(03)-1.3layout

    1. 根据C++ GUI Qt4编程(第二版)整理2. 系统:centos7:  Qt版本:5.5.13. 程序:layout.cpp #include <QApplication> #i ...

  2. PIE SDK Pansharp融合

    1.算法功能简介 Pansharp 融合是基于最小二乘逼近法来计算多光谱影像和全色影像之间灰度值关系,具体过程是利用最小方差技术对参与融合的波段灰度值进行最佳匹配,以减少融合后的颜色偏差.该融合方法不 ...

  3. my33_内存满导致mysqld被kill

    监控报警发现MGR的一个节点故障,查看时发现LVS已经发生切换,LVS切到了MGR新的写节点上了,排查原因 /var/log/message Mar :: db10 kernel: crond inv ...

  4. 网站ico那点事儿

    一. 如何获取某个网站的favicon.ico http://moco.imooc.com/player/report.html 今天看到这个网站上,左侧的小图片挺好看的,想弄下来,检查源码,也没有看 ...

  5. phantomJs原理

    引用文段:链接:https://www.jianshu.com/p/0254391918f7 网页渲染可分为服务端渲染和客户端渲染,前者是指你在浏览器地址栏输入一个网址,Web服务器处理请求过程就将所 ...

  6. Gradle发布项目到 maven(1)

    常见的 Maven 仓库 JCenter.MavenCenter.JitPack epositories { google() // google 仓库 jcenter() // JCenter 仓库 ...

  7. 结合manage.py,在flask项目中使用websocket模块--- flask-socketio

    前言:       - 为什么我要使用 flask-socketio模块,而不是flask-sockets?       - 因为flask-socketio与前端流行的websocket库socke ...

  8. 《Python编程从入门到实践》_第八章_函数

    一个简单的函数 先看一个简单的函数 def say_hello(): '''打印hello''' print("Hello!") say_hello() #运行结果 Hello! ...

  9. WebAssembly简单指导---译

    开发者指导 本页面提供一步一步的操作将一个简单的程序编译成webassembly 前提要求 为了编译成webAssembly,需要提前安装一些工具: Git.在Linux和OSX下已自带了Git,在W ...

  10. 深入理解JavaScript系列(30):设计模式之外观模式

    介绍 外观模式(Facade)为子系统中的一组接口提供了一个一致的界面,此模块定义了一个高层接口,这个接口值得这一子系统更加容易使用. 正文 外观模式不仅简化类中的接口,而且对接口与调用者也进行了解耦 ...