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); } }); }
声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。