WebView에서 컨텐트를 로드하는 방법은 다음 세 가지가 있다.
- loadUrl
- loadData
- loadDataWithBaseURL
한글 인코딩이 문제가 되는 건 html을 코드에서 생성해서 넘겨줄 때다. 그냥 API를 보면 loadData를 쓰면 된다고 생각하기 쉬운데, 사실 loadData의 구현을 보면 loadUrl을 사용하되 data:라는 scheme을 사용하게 되어 있어서 loadUrl에 더 가깝다. 그래서 실제로 loadData의 content에 html을 줄 경우 이걸 URL로 인식하기 때문에 URLEncoder로 encode해주지 않으면 한글이 깨진다. 또, 인코딩을 해주면 html의 태그도 같이 encode되서 html이 안 나온다. 그래서, 사실은 loadData는 거의 쓸모가 없다.
대신 loadDataWithBaseURL 쓰면 된다. 다음과 같이 쓰면 문제 없이 한글도, html도 나온다.
webView.loadDataWithBaseURL(url, htmlContent, "text/html", "UTF-8", null);
url에는 임의로 아무 거나 넣어주면 된다. browser의 back/forward 기능에서 쓰기 위함이라고 하니 unique하면 좋을 것이다. url에 null을 넣으면 about:blank로 연결되기 때문에 아무 것도 안 나올 수도 있다. 그냥 의미 없지만 unique한 스트링을 아무렇게나 넘겨주면 된다.
반응형
'Program > Android Java' 카테고리의 다른 글
[Android/안드로이드] JSON Parser ( 제이슨 파서 ) (0) | 2012.09.27 |
---|---|
[HOW TO] Use Apktool (0) | 2012.09.27 |
microlog4android 사용 (0) | 2012.09.06 |
Google Analytics SDK for Android (0) | 2012.09.06 |
불규칙적인 android java.lang.UnsatisfiedLinkError (0) | 2012.08.29 |