纠结的一天 —— 由base64编解码与加号、空格引起
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编解码与加号、空格引起的更多相关文章
- Delphi Base64 编解码函数
Delphi 自带 Base64 编解码的单元, EncdDecd这个单元提供两套四个公开函数: 对流的编解码:procedure EncodeStream(Input, Output: TStrea ...
- ios Base64编解码工具类及使用
为了避免明码传递http内容,可以用base64编码后传输,收到方再解码,也方便了2进制数据的字符串式传输. 对于ios来说,google给提供了一个很好的工具类,方便进行base64编解码,当然也可 ...
- Java实现BASE64编解码
Java实现BASE64编解码 作者:chszs,转载需注明.博客主页:http://blog.csdn.net/chszs BASE64和其它类似的编码算法通经常使用于转换二进制数据为文本数据,其目 ...
- Delphi 自带的 Base64 编解码函数
今天帮别人解决一个关于 Base64 编解码的问题,竟然发现 Delphi 自带了 Base64 编解码的单元,叫 EncdDecd,这名字很拗口而且不直观,估计这是一直很少人关注和知道的原因. 这个 ...
- openssl命令行Base64编解码
openssl对base64编解码的规范支持较差,用它编解码的结果别的语言如php处理很不方便,注意的几点整理如下 1,如果php加密结果做base64编码长度小于64,则需要添加一个换行符opens ...
- python rsa 加密解密 (编解码,base64编解码)
最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔 ...
- python base64 编解码,转换成Opencv,PIL.Image图片格式
二进制打开图片文件,base64编解码,转成Opencv格式: # coding: utf-8 import base64 import numpy as np import cv2 img_file ...
- EasyDarwin开源流媒体云平台中boost Base64编解码后与源长度不匹配的bug
本文转自EasyDarwin团队Alex的博客:http://blog.csdn.net/cai6811376 EasyDarwin云平台中部分协议使用了Base64编码昨晚报文通信的载体.比如在对摄 ...
- C++,Base64编解码字符串或文件
参考链接:在C语言中使用libb64进行Base64编解码 GitHub地址:https://github.com/BuYishi/cpp_base64_demo base64_demo.cpp #i ...
随机推荐
- requests模块的一些总结
一.cookie模拟登录的三种方式 #!/usr/bin/env python # -*- coding: utf-8 -*- #author tom import requests post_url ...
- 剑指offer——面试题4:二维数组中的查找
// 面试题4:二维数组中的查找 // 题目:在一个二维数组中,每一行都按照从左到右递增的顺序排序,每一列都按 // 照从上到下递增的顺序排序.请完成一个函数,输入这样的一个二维数组和一个 // 整数 ...
- 小问题总结:鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现
问题如标题: 鼠标点击到输入框(input)里的时候,输入框的提示消失,鼠标再移开,输入框提示出现.如图所示: 做法如下: <input type="text" name ...
- PIE SDK矢量唯一值渲染
1. 功能简介 图层的唯一值渲染即是根据矢量图层的某一个数值字段的属性值,按照值的不同大小设置不同的显示符号.属性数值相等的所有要素归为同一种类,即同一符号. 2. 功能实现说明 2.1. 实现思路及 ...
- 「bzoj1925」「Sdoi2010」地精部落 (计数型dp)
「bzoj1925」「Sdoi2010」地精部落---------------------------------------------------------------------------- ...
- 一个新时代的UI设计师需要具备这些技能
如今互联网行业发展如日中天,设计师本就是稀缺人才.再加上未来也将迎接人工智能时代,未来的设计师不只像现在只是做一些网页.APP界面,还会出现更多的UI设计衍生职业.如下列举的几大类: 一.初级阶段 1 ...
- Flask中的的SQLAlchemy
好久没有更新Blog了 今天来聊一聊 Python 的 ORM 框架 SQLAlchemy 有的孩子已经听说过这个框架的大名了,也听说了 SQLAlchemy 没有 Django 的 Models 好 ...
- Tortoise SVN 快速操作手册
1.库的存储结构 版本库文件结构如图所示: Code文件夹为源码文件夹,doc为文档目录文件夹, 1.1 branch:分枝文件夹 当多个人合作,可能有这样的情况出现:John突然有个想法,跟原先的设 ...
- (转)远程SSH连接服务与基本排错
远程SSH连接服务与基本排错 原文:https://www.cnblogs.com/chensiqiqi/p/6224474.html#top 1.1 为什么要远程连接Linux系统 在实际的工作场景 ...
- Immutable-不变模式与不变类
不变模式的定义 一个对象在创建之后就不再变化,就是所谓的不变模式(Immutable Pattern): 一般来讲,一个对象要么就是可变对象(Mutable Object),要么就是不变模式(Immu ...