기존의 URLLoader 의 경우

한상훈님의 말씀에 의하면

euc-kr 로 인코딩되어 있는 파일에서

4000 자가 넘는 xml 파일의 경우 파싱 에러가 난다고 합니다.

저 역시도 한글 파일의 내부 파서 오류때문에

엄청나게 고생했었습니다.

그래서 URLLoader 가 아니라

URLStream 으로 읽어들여 직접 "euc-kr" 로 읽어와서

XML 로 파싱하는 방법으로 해결하였습니다.

아래는 XMLLoader 클래스의 주요 소스입니다.

override protected function loadComplete( e: Event ): void
{
     try
     {
          this._xml = XML( this.loader.readMultiByte( this.loader.bytesAvailable, this.encode ) );
     }
     catch( e: TypeError )
     {
          this.dispatchEvent( new XMLLoaderEvent( XMLLoaderEvent.LOAD_FAIL, "parse error" ) );
          return;
     }
    
     this.dispatchEvent( new XMLLoaderEvent( XMLLoaderEvent.LOAD_COMPLETE ) );
}

위에서 보시다시피 URLStream.readMultiByte 로 직접 텍스트를 가져옵니다.

인코딩 타입은 기본으로 utf-8 로 잡혀있지만

XMLLoader.encode 라는 변수에 직접 euc-kr 또는 ascii 로 설정하실 수 있습니다.

아래는 euc-kr 로 작성된 파일을 URLLoader 와 XMLLoader 를 실험해놓은 페이지 입니다.

URLLoader : http://www.as3.kr/URLLoader/

XMLLoader : http://www.as3.kr/XMLLoader/

위 실험에서 URLLoader 는 50% 확률로 XML 이 오류가 나는 반면

XMLLoader 는 에러가 나지 않는 것을 보실 수 있습니다.



테스트에 사용된 소스와 관련 소스를 첨부합니다.

다운로드


+ Recent posts