傲娇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是可以设定字符集名称,来告知服务器其所携内容的字符集。贫道赶忙又修改了下代码,
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,"UTF-8"));
response = httpClient.execute(method);
} catch (Exception ex) {
ex.printStackTrace();
}
return response;
}
果然修改后,服务器也如同预料地那样,返回了Input里含有非法字符的错误。此时的服务器发出了由衷的赞叹:”自从客服端改了代码后, 腰不酸,腿不疼,处理其请求来,再也不crash了。"
道可道,非常道。看来在IT的世界中,一样有“道”的存在,在本例中,这个"道"就是字符集。
此时的贫道,又拿起了道德经,走在蔼蔼的仙霾中,重新温习了起来,远处传来一串串麻雀的咳嗽声。
傲娇Android二三事之操蛋的开发日记(第一回)的更多相关文章
- 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)
android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比 转载请注明http://w ...
- 《Android深度探索HAL与驱动开发》第一章阅读心得
首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...
- “数学口袋精灵”App的第三个Sprint计划----开发日记(第一天12.7~第十天12.16)
“数学口袋精灵”第三个Sprint计划----第一天 项目进度: 基本完成一个小游戏,游戏具有:随机产生算式,判断对错功能.通过轻快的背景音乐,音效,给玩家提供一个良好的氛围. 任务分配: 冯美欣: ...
- 【Android开发日记】之入门篇(十二)——Android组件间的数据传输
组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...
- 在Android中使用OpenGL ES进行开发第(二)节:定义图形
一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...
- Android高手速成--第四部分 开发工具及测试工具
第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...
- Android深度探索--HAL与驱动开发----第五章读书笔记
第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...
- Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog
Google Developing for Android 二 - Memory 最佳实践 | 分类于 Android最佳实践 原文:Developing for Android, II Th ...
- Android SDK +Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建
Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK C/C++平台的搭建,尽管以前有成功在Windows ...
随机推荐
- [开发工具] 史上最全系列之开发环境搭建之DDMS
原文链接:http://www.eoeandroid.com/forum.php?mod=viewthread&tid=275774 一.简介 DDMS 的全称是DalvikDebug Mon ...
- SharePoint 2010 使用自定义aspx页面替换列表默认的新建(NewForm.aspx),查看(DispForm.aspx)和编辑(EditForm.aspx)页面
转:http://www.cnblogs.com/sygwin/archive/2011/11/04/2236678.html 如何使用自定义的aspx页(比如Application Page)替换列 ...
- Cookie帮助类
using System; using System.Collections.Generic; using System.Text; using System.Web; namespace AIMSC ...
- POJ 2243 Knight Moves
Knight Moves Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 13222 Accepted: 7418 Des ...
- 【Python】不定期更新学习小问题整理
1 ctrl+D 退出python 2 from __future__ import division 小数除法 1/2 整除符号 // 比如4//2 3 为什么要写这个? reloa ...
- Java + Excel 接口自动化
最近项目比较悠闲,想找点事干,写了个 Excel 接口测试的 "框架" 以前用 python 写过一个,这次用 java, 应该说框架都不算,反正就是写了,能帮我解决问题就行. 当 ...
- 黑盒测试用例设计方法&理论结合实际 -> 边界值分析法
一. 概念 边界值分析法就是对输入或输出的边界值进行测试的一种黑盒测试方法.通常边界值分析法是作为对等价类划分法的补充,这种情况下,其测试用例来自等价类的边界. 二. 边界值分析法的应用 根据大量的测 ...
- application/x-www-form-urlencoded等字符编码的解释说明
关于application/x-www-form-urlencoded等字符编码的解释说明 在Form元素的语法中,EncType表明提交数据的格式 用 Enctype 属性指定将数据回发到服务器时浏 ...
- 【转载】strlen与sizeof区别
自己小结: sizeof使用时,若是数组变量,则是数组变量占的大小 char a[10]; sizeof(a)=10 若是指针,则为指针大小,数组变量作为函数参数传递时,会退化成指针,且函数内是不知道 ...
- A Tour of Go Concurrency
The next section covers Go's concurrency primitives. A Tour of Go Goroutines A goroutine is a lightw ...