武宗元年 十一月初四 霾

今日魔都,依旧仙雾环绕,仿佛蓬莱落凡尘。望着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的世界中,一样有“道”的存在,在本例中,这个"道"就是字符集。

此时的贫道,又拿起了道德经,走在蔼蔼的仙霾中,重新温习了起来,远处传来一串串麻雀的咳嗽声。

												

最新文章

  1. Socket编程实践(2) Socket API 与 简单例程
  2. Day11-协程/异步IO/RabbitMQ
  3. python学习5 常用三方模块
  4. 初学git(一):创建本地“仓库”
  5. FCC上的初级算法题
  6. js获取页面宽度高度及屏幕分辨率
  7. [原创] hadoop学习笔记:hadoopWEB监控
  8. Java 控制反转和依赖注入模式【翻译】【整理】
  9. HDU 4686 Arc of Dream(矩阵)
  10. apache kafka源码分析-Producer分析---转载
  11. 关于CMD命令行两三事
  12. ASP.NET中重复表格列合并的实现方法(转自脚本之家)
  13. 个人总结-Alpha阶段
  14. 网络小白之WAN与LAN的区别
  15. Intellij IDEA 安装lombok及使用详解
  16. FastJson用法
  17. linux把程序做成系统服务并自启动
  18. 几种流行Webservice框架
  19. 步步为营-68-asp.net简单练习(get set)
  20. Linux shell脚本 批量创建多个用户

热门文章

  1. ajax取json数据——简单的
  2. JDBC 与ODBC的区别
  3. HTML5 jQuery图片上传前预览
  4. ASP.NET工作笔记之一:图片上传预览及无刷新上传
  5. less命令
  6. QT数据库使用案列【联系人】-- 使用sqlite和QStringListModel
  7. pomelo环境搭建
  8. jenkins api调用
  9. SGU131 - Hardwood floor(状态压缩DP)
  10. HDU4276 - The Ghost Blows Light(树形DP)