base64解码urlencode乱码
问题描述:
服务器返回一个json格式的base64加密的字符串,要求将字符串解码得到一个json获取字段url,然后根据url获取一个图片
问题1:
通过Base64.decode(str.getBytes(), Base64.DEFAULT)解析获取到的是乱码
结果是这样的:
原因:
简单来讲就是 base64编码->网络传输时urlencode编码->urldecode->base64decode
1.去掉 2.替换空格为+ android自带可以解析base64在网络传输中因为url encode编码带来的问题。
String jsonstr = new String(Base64.decode(str.getBytes(), Base64.URL_SAFE)); 结果
问题二:如何将一个json格式的字符串转换为json对象?
解决:通过gson 字符串转化为json对象
字符串转化为特定的json对象
ADImage一个bean类 可以通过gsonformat自动生成
代码段: 通过okhttp3 post请求网络
private void postAsynHttp() {
OkHttpClient mOkHttpClient=new OkHttpClient().newBuilder()
.connectTimeout(10000,TimeUnit.MILLISECONDS)
.readTimeout(10000,TimeUnit.MILLISECONDS)
.writeTimeout(10000,TimeUnit.MILLISECONDS).build();
RequestBody formBody = new FormBody.Builder()
.add("width", String.valueOf(SCREEN_width))
.add("height", String.valueOf(SCREEN_height))
.build();
Request request = new Request.Builder()
.addHeader("Accept", "application/json")
.addHeader("Content-Type", "application/json")
.url(ADURL)
.post(formBody)
.build();
Call call = mOkHttpClient.newCall(request);
call.enqueue(new Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.i(TAG,"post onFailure");
}
@Override
public void onResponse(Call call, Response response) throws IOException {
String str = response.body().string();
Log.i(TAG,"post onResponse:"+str);
String jsonstr = new String(Base64.decode(str.getBytes(), Base64.URL_SAFE));
// JsonObject data = new JsonParser().parse(jsonstr).getAsJsonObject();
Gson gson = new Gson();
ADImage adImage = gson.fromJson(jsonstr,ADImage.class);
ADUrl = adImage.getRes().getPic();
Log.i(TAG, "ADUrl:" + ADUrl);
}
});
}
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。
