武宗元年 十一月初四 霾

今日魔都,依旧仙雾环绕,仿佛蓬莱落凡尘。望着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二三事之操蛋的开发日记(第一回)的更多相关文章

  1. 淘宝(阿里百川)手机客户端开发日记第一篇 android 主框架搭建(一)

    android 主框架搭建(一) 1.开发环境:Android Studio 相继点击下一步,直接项目建立完毕(如下图) 图片看的效果如果很小,请放大您的浏览器显示百分比  转载请注明http://w ...

  2. 《Android深度探索HAL与驱动开发》第一章阅读心得

    首先了解到Android系统架构是由四层构成:其中第一层是Linux内核,他的作用是负责Linux的驱动程序以及内存.进程.电源等管理操作:第二层是C/C++代码库,也就是Linux下.so的文件:第 ...

  3. “数学口袋精灵”App的第三个Sprint计划----开发日记(第一天12.7~第十天12.16)

    “数学口袋精灵”第三个Sprint计划----第一天 项目进度: 基本完成一个小游戏,游戏具有:随机产生算式,判断对错功能.通过轻快的背景音乐,音效,给玩家提供一个良好的氛围.  任务分配: 冯美欣: ...

  4. 【Android开发日记】之入门篇(十二)——Android组件间的数据传输

    组件我们有了,那么我们缺少一个组件之间传递信息的渠道.利用Intent做载体,这是一个王道的做法.还有呢,可以利用文件系统来做数据共享.也可以使用Application设置全局数据,利用组件来进行控制 ...

  5. 在Android中使用OpenGL ES进行开发第(二)节:定义图形

    一.前期基础知识储备笔者计划写三篇文章来详细分析OpenGL ES基础的同时也是入门关键的三个点: ①OpenGL ES是什么?与OpenGL的关系是什么?——概念部分 ②使用OpenGLES绘制2D ...

  6. Android高手速成--第四部分 开发工具及测试工具

    第四部分 开发工具及测试工具 主要介绍和Android开发工具和测试工具相关的开源项目. 一.开发效率工具 Json2Java根据JSon数据自动生成对应的Java实体类,还支持Parcel.Gson ...

  7. Android深度探索--HAL与驱动开发----第五章读书笔记

    第五章主要学习了搭建S3C6410开发板的测试环境.首先要了解到S3C6410是一款低功耗.高性价比的RISC处理器它是基于ARMI1内核,广泛应用于移动电话和通用处理等领域. 开发板从技术上说与我们 ...

  8. Google Developing for Android 二 - Memory 最佳实践 // lightSky‘Blog

    Google Developing for Android 二 - Memory 最佳实践   |   分类于 Android最佳实践 原文:Developing for Android, II Th ...

  9. Android SDK +Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建

    Android SDK+Eclipse+ADT+CDT+NDK 开发环境在windows 7下的搭建 这几天一直在研究 Android SDK  C/C++平台的搭建,尽管以前有成功在Windows ...

随机推荐

  1. [VC6]ONMESSAGE()宏编译时出现"sytax error ;"错误时

    自定义消息时编译出错,经排查,在定义消息的头文件里 #define WM_XXX (WM_USER+1000); 最后多加了一个分号引起. 吐血.

  2. 【转】读取android根目录下的文件或文件夹

    原文网址:http://my.oschina.net/Ccx371161810/blog/287823 读取android根目录下的文件或文件夹 SDK的操作 读取android根目录下的文件或文件夹 ...

  3. 使用asp.net MVC4中的Bundle遇到的问题及解决办法

    背景 之前有过使用MVC3的经验,也建过MVC4的基本样例看过,知道有bundle这么一个方法. 近日想建个网站使用MVC4,但是我觉得在基本样例上改不好,有太多无用的东西,所以就建了一个空白的MVC ...

  4. 【译】 AWK教程指南 8处理多行数据

    awk 每次从数据文件中只读取一行数据进行处理.awk是依照其内置变量 RS(Record Separator) 的定义将文件中的数据分隔成一行一行的Record.RS 的默认值是 "\n& ...

  5. wuzhicms上传弹出层,如何返回数据到当前页面?

    我们要实现下面功能: 上传图片后,返回图片列表到页面: 点击开始上传后,自动返回结果到页面. 原理:通过openiframe打开上传弹出层. 其中: returntype 在这里是 2 www/res ...

  6. 企业移动互联网O2O微信支付流程图

    过去一周里最受关注的应该就是微信了,腾讯合作伙伴大会微信分论坛的火爆现场,没有亲临其境是无法想象的,近3000人报名,2000多人来到现场,试图进入只能容纳300人的会场…… 闲话不表,进入正题吧,本 ...

  7. Node.js也分裂了-开源社区动态

    继CoreOS与Docker分道扬镳继而推出自己的容器引擎Rocket后不久,又传来了Node.js分裂的消息.由于Node.js的贡献者因对负责Node.js开发的公司Joyent在对Node.js ...

  8. javascript设计模式6

    单体模式:用来划分命名空间而组织一些方法和属性的对象,如果它能被实例化,只能被实例化一次:但对象不是单体 var Singleton={ attr1:true; attr2:2, method1:fu ...

  9. Java网络编程(TCP协议-服务端和客户端交互)

    客户端: package WebProgramingDemo; import java.io.IOException; import java.io.InputStream; import java. ...

  10. 使用Java原生代理实现数据注入

    本文由博主原创,转载请注明出处 完整源码下载地址 https://github.com/MatrixSeven/JavaAOP 上一篇,咱们说了使用Java原生代理实现AOP的简单例子,然么就不得不说 ...