플랫폼/안드로이드 android

안드로이드 unescape /escape [StringEscapeUtils로 해결]

삐뚤어진 개발자 2019. 6. 5.

웹서버 iis (wcf 서버)와 안드로이드가 통신하는 앱을 만들고 있다.

 

 

근데 json이 이상한 데이터 형식으로 넘어오는 것이었다. 

큰따옴표가 붙어서 왔다.

({\"Table\":[{\"Column1\":\"OK\"}],\"Table1\":...) 이런식

 

 

찾아보니 iis에서 json값을 줄때, "따옴표를 \" 이런식으로 값을 줬다.

데이터 형식을 이스케이프(escape)로 준거였다.

 

[참고] 이스케이프 설명

 

escape - 생활코딩

요약(Summary) URI로 데이터를 전달하기 위해서 문자열을 인코딩 문법(Syntax) escape(string) 인자(Parameters) 인자명 데이터형 필수/옵션 설명 string string 필수 인코딩할 문자열 반환값(Return) string, 인코딩된 문자열을 반환 설명(Description) 웹을 통해서 데이터를 전송할 때 특정 문자들은 특수한 기능으로 사용된다. 예를들어, http://a.com?name=egoing&job=progra

opentutorials.org

 

wcf서버에서 이스케이프를 풀려고 갖은 방법을 해봐도 안풀렸다.

(이유는 wcf서버에서 이스케이프 형식을 강제해놓은 것 같다)

 

서버에서 이스케이프를 해독하여 보내는 방법은 포기하고,

안드로이드로 넘어와서 이스케이프를 해독(unescape) 해주려고 방법을 찾았다.

 

많은 시도 끝에 결국 아파치 라이브러리에 StringEscapeUtils 클래스의 unescapeJava 메소드를 써주니 해결됐다.

 

[적용방법]

 

1. gradle 에 아파치 라이브러리 추가. ( implementation 'org.apache.commons:commons-lang3:3.6'  추가)

 

implementation 'org.apache.commons:commons-lang3:3.6'

 

예시

 

2. StringEscapeUtils 클래스의 unescapeJava 메소드를 사용한다.

 

String test = StringEscapeUtils.unescapeJava(escape);

 //escape 는 이스케이프 문자열.

 

 

예시

 

 

[적용후]

s 가 escape 문자열 test가 unescape적용후

이제 json이 제대로 출력된다.

댓글