最近在进行Android开发的过程中,发现了一个问题,特意在这里记录一下。下面我来描述一下这个问题:当我在Android 4.4版本进行http get请求的时候,我的get请求链接里的中文字符串显示为???,导致服务器不能正常识别我的参数,从而使程序运行出错(并不是所有的Android设备都会出错,我的这种情况仅在Android版本为5.0以下的设备上出现了)。
具体的情况如下图:
在上图可以看出,data参数本来是一个中文字符串,但是却变成了???,导致服务器那边接受到参数不能识别。
从图中看出,我的content-type里已经包括了UTF-8编码,但是依旧显示的是乱码。一般情况下,出现这种中文乱码都是由于编码导致的。经过测试和查阅资料,我在进行我的网络请求之前,也就是在拼接我的url之前对我们的中文参数进行编码,就可以解决这个问题。
下面我把自己修改前后的代码贴出来(在进行网络请求之前的url拼接阶段):
这是之前出错的代码:
public void getAutoCompleteInfo(String data, SingleServiceState listener) {
this.listener = listener;
String url = URL.AUTO_COMPLETE + "?data=" + data + "&types=3,4,5";
QueueHelpter.add(NetHelper.get(url, JsonArray.class, this));
}
这是修改之后正确的代码:
public void getAutoCompleteInfo(String data, SingleServiceState listener) {
try {
this.listener = listener;
String s = URLEncoder.encode(data, "utf-8");
String url = URL.AUTO_COMPLETE + "?data=" + s + "&types=3,4,5";
QueueHelpter.add(NetHelper.get(url, JsonArray.class, this));
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
通过比较可以得出,data字符串进行了
URLEncoder.encode(data, “utf-8”)
的处理,之后再进行拼接,就不再是???这样的乱码了。
出现乱码可能会有多种情况,我这篇文章说的是其中的一种,也就是我自己遇到的一个问题。在这里我当做一个小tip记录下来,以供自己以后查阅,也希望能对遇到类似问题的朋友有一些帮助~
版权声明:本文为y505772146原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。