Program/Android Java

WebView 한글 문제

너구리V 2012. 9. 27. 14:30

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한 스트링을 아무렇게나 넘겨주면 된다.

반응형