반응형
웹뷰 브릿지 함수 JsonArray를 String으로 전달해야할 때 이슈
웹에서 받은 javaScript fuction으로 결과를 return주는 작업에서 이슈가 발생했다.
val js = "javascript:${String}(${String});"
webView.evaluateJavascript(js) {
jsCallback.callback(it)
}
이유 : 문자열 내의 이중 인용부호(")가 제대로 파싱되지 않아 JSON 배열이 조기에 끊기기 때문
Web에서 배열 "localAlarmList": "[{\"autoId\":1, ... 으로 될 때 String쪽 배열이 빨리 끊긴다. \" -> \\\\\"으로 바꿔주어 해결
[안드로이드 해결]
웹 또는 네트워크 요청에서 JSON 배열을 문자열로 처리할 때, 문자열 내 인용부호(")를 이스케이프하여 문제가 발생하지 않도록 해야 합니다.
- Android에서는 JSON 문자열 내 인용부호(")를 이스케이프하기 위해 \\\" 형식을 사용합니다. 이때 이스케이프를 처리하는 과정에서 총 5개의 문자가 필요합니다.
이해 과정:
- "\"" → "\\\""로 변환.
- 최종 결과는 \\\" 형태가 되어야 하므로, 각 \가 두 번씩 이스케이프됩니다.
- 이로 인해 Android에서는 5개의 문자(\\\")로 변환됩니다.
[iOS 해결]
iOS에서는 JSON 문자열 내 인용부호(")를 이스케이프하기 위해 \" 형식을 사용합니다. 이스케이프 문자를 한 번만 해석하기 때문에, 총 3개의 문자로 이스케이프가 처리됩니다.
이해 과정:
- "\"" → "\\\""로 변환.
- Swift는 이스케이프 처리를 한 번만 적용하므로, 3개의 문자(\\\")로 충분합니다.
반응형
'안드로이드' 카테고리의 다른 글
[Android] 로컬 알람 적용 방법 (0) | 2024.11.14 |
---|---|
[Android] Room DB에 대해 알아보자. (0) | 2024.06.26 |
[Android] CoroutineWorker와 Hilt를 사용한 파일 다운로드 및 압축 해제 (0) | 2024.06.14 |
[Android] Glide를 통해 이모티콘 Gif 구현하기 (0) | 2024.06.14 |
[Android] WebView 텍스트 고정 (글자크기 고정) (0) | 2024.05.28 |