안녕하세요.

PC용 사이트를 파싱해서 모바일 레이아웃으로 만든 다음, 이를 webView에 뿌려주는 식으로 모바일 페이지를 보여주는 어플리케이션을 만들려고 합니다.

1. HTML을 받아서,

2. 파싱해서 모바일 레이아웃의 HTML로 바꿔주고, 

3. 이걸 string에 집어넣었고, 

4. 이 string을 넘겨 웹뷰에 띄우려고 했는데, 이게 문제입니다.



webview.loadData( content, "text/html", "utf-8"); 

를 쓰면 진저까지는 잘 돌지만, ICS에서는 글자가 깨져 나옵니다.(물론 저 사이트는 UTF-8을 씁니다) 찾아보니 ICS에선 loadData를 쓰면 저런다더군요;;


그래서

 webview.loadDataWithBaseURL("null, content, "text/html", "utf-8", null);

로 바꾸어보니 이제 ICS에서도 글자가 깨지지 않고 잘 보입니다만 이제 webview.goBack();이 안 먹힙니다. 즉 뒤로 안 가집니다;;

Android API를 찾아보니 loadDataWithBaseURL()의 마지막 인자는 historyURL이라고 해서, 이전 페이지의 링크를 마지막 인자에 넣어보기도 했지만 역시 안 됩니다.


더 이상은 어찌할 방도를 모르겠습니다. 도와주세요!...


====추가=====

webview.loadData(content, "text/html; charset=utf-8", "utf-8");

로 바꿔주니 한글도 깨지지 않고 뒤로 가기도 잘 됩니다만,

한글 URL로 된 링크가 작동을 안합니다..... 어쩌면 좋을까요.

++++해결+++++

해결했습니다. 넘겨줄 URL을 URLEncoder.encode()로 인코딩시켜 주는데, 이 때 주의할 점은 URL String 통째로 인코딩시켜주면 안 됩니다. 한글로 된 쿼리 부분만 인코딩시키세요.

ex) "http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=ㅁㄴㅇㄹ"라고 하면,

"ㅁㄴㅇㄹ"부분만 URLEncoder.encode("ㅁㄴㅇㄹ", "utf-8");로 "%E3%85%81%E3%84%B4%E3%85%87%E3%84%B9"로 인코딩시킨 후

"http://search.naver.com/search.naver?sm=tab_hty.top&where=nexearch&ie=utf8&query=" + "%E3%85%81%E3%84%B4%E3%85%87%E3%84%B9" 이런 식으로 URL을 넘기시면 됩니다.