Retrofit响应中的奇怪字符

时间:2016-03-11 11:18:37

标签: android utf-8 retrofit

我的应用程序调用一个Web服务,它以字节为单位返回一个文件。该文件可以是pdf或JPG。我正在使用Retrofit。这就是我配置呼叫的方式:

public static final InterfazGibMobHttp getRetrofitClientUtf(Context c){

    OkHttpClient client = new OkHttpClient();
    HttpLoggingInterceptor logging = new HttpLoggingInterceptor();
    logging.setLevel(HttpLoggingInterceptor.Level.BODY);
    settings = c.getSharedPreferences(c.getString(R.string.sharedPreferencesName), 0);
    client.interceptors().add(new Interceptor() {

        @Override
        public com.squareup.okhttp.Response intercept(Interceptor.Chain chain) throws IOException {
            com.squareup.okhttp.Response respuesta2 = chain.proceed(chain.request());
            String respuesta=respuesta2.body().string();//Weird characters here
            //Some logging
            }

            com.squareup.okhttp.Response newResponse = respuesta2.newBuilder().body(ResponseBody.create(respuesta2.body().contentType(), respuesta.getBytes())).build();

            return newResponse;
        }
    });
    client.interceptors().add(logging);

    String url=settings.getString("urlServlet", null);
    Retrofit builder = new Retrofit.Builder()
            .baseUrl(url)
            .addConverterFactory(GsonConverterFactory.create())
            .client(client)
            .build();

    final InterfazGibMobHttp interfaz = builder.create(MyInterface.class);
    return interfaz;
}

当应用收到响应时,它应该获取字节,并使用以下代码创建一个文件:

Call<ResponseBody> peticion=RetrofitClient.getRetrofitClientUtf(ViewPagerActivity.this).obtenerFichero(settings.getString("imei", ""),settings.getString("idCliente", ""), object);
peticion.enqueue(new Callback<ResponseBody>() {
@Override
public void onResponse(Response<ResponseBody> response, Retrofit retrofit) {

    if(response.isSuccess()){

        ResponseBody body=response.body();
        File dir = new File(Environment.getExternalStorageDirectory() + “/nameOfApp/“+variable+"/"+anocherVariable);


        if (!dir.exists()) {

            dir.mkdirs();
        }

        File file = new File(dir, objetoFichero.get("nombre").getAsString());

        try {
            file.createNewFile();
        } catch (IOException e) {
            e.printStackTrace();
        }

        try {
            fos=new FileOutputStream(file);
            fos.write(body.bytes());
            fos.flush();
            fos.getFD().sync();
            fos.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    anotherVariable+=1;
}

@Override
public void onFailure(Throwable t) {

    t.printStackTrace();
}
});

文件已创建,但是当我尝试打开文件时,文件未正确创建。它似乎被打破了。检查我得到的响应,在字符串“respuesta”中,我收到的一些字符显示为“?”黑色背景,所以可能是一个编码问题。我怎么能正确地得到我的文件......?在哪里玩编码?服务器用UTF-8发送它,在拦截器中我看到它是UTF-8的响应......我的错误在哪里?

谢谢。

0 个答案:

没有答案