您的位置:首页 > 移动开发 > Android开发

傲娇Android二三事之操蛋的开发日记(第一回)

2013-12-06 13:13 288 查看
武宗元年 十一月初四 霾今日魔都,依旧仙雾环绕,仿佛蓬莱落凡尘。望着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的世界中,一样有“道”的存在,在本例中,这个"道"就是字符集。此时的贫道,又拿起了道德经,走在蔼蔼的仙霾中,重新温习了起来,远处传来一串串麻雀的咳嗽声。

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: