糾結的一天 —— 由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時的編碼方式有關,尚未確診,繼續尋找中......

結束語:

我們經常會遇到各種各樣“奇葩”的棘手問題,在這種情況下,千萬不要第一時間試圖去繞開它,而去尋找替代的解決方案。當你慶幸地以為尋找到一條“捷徑”時,可能那個坎還在前方等着你!到最后會發現,其實問題的本質在另外一個地方,只是你還沒有發現它!


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM