안드로이드 스튜디오 범블비(Bumblebee) 버전으로 업데이트하니 원래 잘 나오던 Network Inspector에서의 응답 글자 인코딩이 깨져보였다.
해결방법
해결방법은 Retrofit Request Header에 Accept-Encoding을 추가해주면된다.
Accept-Encoding: identity;
이는 클라이언트가 지원하는 인코딩을 서버에 알려주는 것인데, identity의 경우 압축이나 수정없이 어떠한 인코딩도 수행되지 않음을 의미한다. 실제 프로덕션에서는 gzip 인코딩등 압축을 이용할 수 있기때문에 Debug 모드일때만 Accept-Encoding을 identity;로 바꿔주도록 조건문을 추가하는 것이 좋다.
1. 개별 API에 추가하는 방법
@Headers("Accept-Encoding: identity")
@FormUrlEncoded
@POST("some/test/api")
suspend fun getTestData(
@Field("") empty: String = ""
): Response<DataResponse<Any>>
2. 모든 API에 추가하는 방법
커스텀 Interceptor를 만들어서 관련 API를 보낼땐 헤더를 추가해서 보내도록 할 수 있다. OkHttpClient.Builder에 addInterceptor로 만들어진 Interceptor를 추가하여 사용가능하다.
class CustomInterceptor() : Interceptor {
override fun intercept(chain: Interceptor.Chain): Response {
val builder = chain.request().newBuilder()
// 내 서버에 보내는 요청만 Accept-Encoding 추가
if (original.url.toString().contains(BuildConfig.BASE_URL)) {
builder.addHeader("Accept-Encoding", "identity")
}
return chain.proceed(builder.build())
}
}
'프로그래밍 > Android' 카테고리의 다른 글
안드로이드 Unity 플러그인 만들기 (0) | 2022.04.16 |
---|---|
kotlin dsl 적용중 versionNeededToExtract 오류 해결방법 (0) | 2022.04.09 |
[Android] 안드로이드로 게임을 만들어 보았다 (4) | 2022.02.04 |
[안드로이드] BottomSheetBehavior로 차이 카드 앱 처럼 UI 구성하기 (0) | 2021.12.01 |
adb에서 쉽게 딥링크(Deeplink) 열기 / 인텐트(Intent) 전송 (0) | 2021.11.24 |