傲娇Android二三事之操蛋的开发日记(第一回)
武宗元年 十一月初四?霾
今日魔都,依舊仙霧環繞,仿佛蓬萊落凡塵。望著470這個鮮紅的AQI修仙指數,貧道不禁吟道,“正是修仙好光景,霧霾時節又逢君”。但在這個只修bug,不修仙的時代,路上的行人都步履匆匆趕著去修改屬于自己的bug。這不貧道也趕著修改自己的bug。話說最近貧道在開發一個某網站的登錄客戶端,如果密碼輸入常用的英語字符啥的,則相安無事。但一旦輸入諸如:€,¥,$貨幣符號,貌似服務器是克朗臺開發的,見錢眼開啊,立馬高潮到crash,發了個"class=java.nio.charset.MalformedInputException msg=Input length = 1"錯誤,而沒有正確返回Input里含有特殊字符的錯誤。但奇怪的是,從網站里登陸,即使你輸入的密碼全是由€,¥,$組成的,此時的服務器又變成了鐵面無私的包黑子了,立馬返回Input里含有特殊字符的錯誤。貧道暗想:“這服務器哥們沒長兩條腿可惜了,否則跑到洛杉磯啥的,今年的小金人就非他莫屬了”。
俗話說得好:“在家靠父母,出門靠百度”。打開百度頁面,貧道先虔誠的焚香拜了兩拜,然后小心翼翼的輸入java.nio.charset.MalformedInputException,只見立馬眾道友的修煉心得猶如窗外的仙霾滾滾而來。只見其中的一位道友寫道,”從java.nio.charset.MalformedInputException這個異常來看,應該是字符編碼的問題。“難道是服務器沒有編碼處理?但如果是這樣的話,為啥從網站登錄就沒問題呢。難道是網頁發送請求的時候,對其中的內容進行了編碼。貧道又立馬輸入”http 字符集“查詢,這時吳秦吳大俠的一篇鴻篇巨作字符集和字符編碼(Charset & Encoding),映入了貧道的眼簾,在此作中,吳大俠提到了:”在HTTP中,與字符集和字符編碼相關的消息頭是Accept-Charset/Content-Type“。難道是我們的代碼中沒有設置字符集信息,導致服務器識別錯誤,然后Crash了。貧道馬上翻出相關代碼,
HttpResponse putRequest(String strUrl,Map<String, String> mapHeaders, String strContent) {HttpResponse response = null;try {HttpClient httpClient = getHttpClient();HttpPut method = new HttpPut(strUrl);if (mapHeaders != null && !mapHeaders.isEmpty()) {for (String key : mapHeaders.keySet()) {method.addHeader(key, mapHeaders.get(key));}}if (strContent != null)method.setEntity(new StringEntity(strContent));response = httpClient.execute(method);} catch (Exception ex) {ex.printStackTrace();}return response;}果然將strContent放到Entity里的時候,沒有任何的字符集設置。但如何給strContent設置字符集呢,貧道趕忙翻開了與”葵花寶典“齊名的developer android?, 只見典籍中記載道?public?StringEntity?(String?s,?String?charset) ,看來StringEntity是可以設定字符集名稱,來告知服務器其所攜內容的字符集。貧道趕忙又修改了下代碼,
果然修改后,服務器也如同預料地那樣,返回了Input里含有非法字符的錯誤。此時的服務器發出了由衷的贊嘆:”自從客服端改了代碼后, 腰不酸,腿不疼,處理其請求來,再也不crash了。"
道可道,非常道。看來在IT的世界中,一樣有“道”的存在,在本例中,這個"道"就是字符集。
此時的貧道,又拿起了道德經,走在藹藹的仙霾中,重新溫習了起來,遠處傳來一串串麻雀的咳嗽聲。
?
?
轉載于:https://www.cnblogs.com/andreitang/p/daily.html
《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀總結
以上是生活随笔為你收集整理的傲娇Android二三事之操蛋的开发日记(第一回)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: [转]阿拉伯数字转一二三和壹贰叁
- 下一篇: JMF天昏地暗之路(一)-----jmf