zoukankan      html  css  js  c++  java
  • 纠结的一天 —— 由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时的编码方式有关,尚未确诊,继续寻找中......

    结束语:

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

  • 相关阅读:
    windbg常用命令
    Windbg双机调试环境配置(Windows7/Windows XP+VirtualBox/VMware+WDK7600)
    SVN使用说明文档
    JavaScript-浏览器兼容之客户端检测
    JavaScript-执行环境
    JavaScript-函数
    JavaScript-静态私有变量
    JavaScript-构造函数模式
    JavaScript 自执行函数剖析
    easyui如何在datagrid 每行增加超链接
  • 原文地址:https://www.cnblogs.com/yuthreestone/p/3601484.html
Copyright © 2011-2022 走看看