Flash Platform의 한글문제는 정말 여러곳에서 발생하는 것 같습니다. 이번에 제가 다룰 문제는 Flash Platform 자체의 문제라기 보단 서버 환경의 문제라고 볼 수 있겠네요.
작년 초 릴리즈된 Adobe의 데스크탑 런타임인 AIR는 웹에서 구현한 사용자 경험을 그대로 데스크탑으로 확장할 수 있다는 강력한 장점이 있지만, 그 장점에 덧붙여 로컬데이터베이스, 네이티브 드래그앤드롭 등 강력한 Native API도 지원하고 있습니다.
특히, Adobe AIR는 사파리, 구글크롬등에서 채택한 Webkit엔진이 런타임내에 탑재되어 있으며, HTMLLoader 클래스를 이용해 간단히 브라우징 기능도 만들 수 있습니다. 특히, Webkit 엔진을 이용해 ActionScript를 전혀 모르는 웹퍼블리셔의 경우에도 AIR 애플리케이션 저작이 가능하며, JS상에서 AIR의 Native API를 이용한 개발도 가능합니다.
위처럼, 어도비에서는 AIR 개발을 위한 개발툴킷(SDK)를 Flex 개발자용과, AJAX 개발자용으로 나눠 제공하고 있습니다.
(Flash에서는 AIR 개발툴킷을 SDK로 부르지 않고 Extension으로 부르며 CS4에는 내장되어 있습니다.)
그럼 본론으로 돌아와서, 제가 이번에 소개하고자 하는 문제점은 Webkit 엔진 기반의 클래스인 HTMLLoader에서 발생하는 문제점으로, 웹페이지의 캐릭터켓이 EUC-KR일 경우, HTMLLoader(Flex에서는 HTML컴포넌트)에서 해당 페이지를 정상적으로 표현할 수 없는 문제점이 있습니다.
이 문제점과 비슷한 문제점으로는 MP3파일의 헤더가 EUC-KR인경우 ID3태그를 불러올 수 없는 문제점인데, 이 같은 문제는 AIR 애플리케이션을 개발할 때 흔히 겪는 문제로, 주로 윈도우플랫폼의 인코딩셋과 관련이 되어있습니다.
윈도우 플랫폼은 타사의 운영체제와 달리, 캐릭터셋을 별도로 CPC949로 사용하게 되는데, 이 경우 Runtims 상에서 ByteArray를 이용해 파일의 정보를 제대로 불러오지 못하는 문제점이 흔히 발생하게 됩니다.
이번에 제가 소개한 문제는, 위에서 살펴본 문제와는 달리 서버의 캐릭터셋의 문제점으로, 최근 대부분 포털사/개인블로그등에서는 웹문서에 EUC-KR 인코딩을 채택하고 있지 않기 때문에, 자주 발생하는 문제는 아닙니다.
아울러, HTMLLoader 클래스는 메타태그의 문자 인코딩을 지정할 수 있는 textEncodingOverride, textEncodingFallback 프로퍼티가 있습니다. 즉, 헤더에 캐릭터셋이 EUC-KR인 웹페이지의 경우 아래처럼, textEncodingOverride 프로퍼티를 이용해, 캐릭터셋을 재정의 할 수 있습니다.
하지만, 위의 방법을 쓰더라도, 웹 페이지가 정상적으로 표현되지 않는 문제는 여전히 발생하게 됩니다. 따라서 인코딩셋을 변경하였지만 이 문제점이 발생하는 곳은 메타태그에 정의된 캐릭터셋의 문제가 아니라, html 파일 자체를 작성에 사용된 케릭터셋이 문제원인임을 알 수 있습니다.
즉 이 문제점을 해결하기 위해서는, 작성된 html 파일 자체의 문자열을 utf-8로 변환하는 방법을 사용해야 합니다. 다만, 현재의 HTMLLoader에서는 그러한 기능이 구현되어있지 않아서, 개인적으로 HTMLLoader 클래스를 확장하여 이 문제점을 수정하였습니다.
MultiHtmlLoader 클래스는, load 메서드를 오버라이드해, 웹 페이지를 URLStream 형식으로 내려 받아, ANSI 문자열인지 체크하고, 변환된 문자열을 다시 loadString 메서드를 호출해 표현하는 형식으로 확장하였습니다. 위의 클래스를 사용하게 되면 EUC-KR HTML 파일을 비롯해, UTF-8 HTML 파일도 모두 표현할 수 있습니다.
위의 스크린샷은 왼쪽은 일반 HTMLLoder에서, 오른족은 MultiHtmlLoader에서 EUC-KR HTML파일을 불러온 결과를 비교한 사진입니다. HTMLLoader에서는 페이지가 정상적으로 표시되지 않고, 문자열도 깨져서 나타나는지만, MultiHtmlLoader에서는 페이지도 정상적으로 표시되며, 문자열도 정상적으로 출력되는것을 볼 수 있습니다.
MultiHtmlLoader 클래스는 마음껏 사용하셔도 좋습니다. 다만, 가끔은 제 블로그를 들러주시는 센스도 잊지말아주세요 ^^;;
이번에 소개한 한글 문제는 AIR Runtime의 문제는 아니지만, HTMLLoader을 이용해 프로젝트를 진행할 때 비교적 흔히 발생할 수 있는 문제인 만큼, 대비가 필요할 것 같네요.. ^^;;



