기존의 URLLoader 의 경우
한상훈님의 말씀에 의하면
euc-kr 로 인코딩되어 있는 파일에서
4000 자가 넘는 xml 파일의 경우 파싱 에러가 난다고 합니다.
저 역시도 한글 파일의 내부 파서 오류때문에
엄청나게 고생했었습니다.
그래서 URLLoader 가 아니라
URLStream 으로 읽어들여 직접 "euc-kr" 로 읽어와서
XML 로 파싱하는 방법으로 해결하였습니다.
아래는 XMLLoader 클래스의 주요 소스입니다.
위에서 보시다시피 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 는 에러가 나지 않는 것을 보실 수 있습니다.
테스트에 사용된 소스와 관련 소스를 첨부합니다.
다운로드
한상훈님의 말씀에 의하면
euc-kr 로 인코딩되어 있는 파일에서
4000 자가 넘는 xml 파일의 경우 파싱 에러가 난다고 합니다.
저 역시도 한글 파일의 내부 파서 오류때문에
엄청나게 고생했었습니다.
그래서 URLLoader 가 아니라
URLStream 으로 읽어들여 직접 "euc-kr" 로 읽어와서
XML 로 파싱하는 방법으로 해결하였습니다.
아래는 XMLLoader 클래스의 주요 소스입니다.
|
위에서 보시다시피 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 는 에러가 나지 않는 것을 보실 수 있습니다.
테스트에 사용된 소스와 관련 소스를 첨부합니다.
다운로드
'ActionScript 3.0 > 유용한 소스' 카테고리의 다른 글
| [AS3] Integer.reverseBytes() of Java. (4) | 2008/07/30 |
|---|---|
| [AS3] ReflectingBitmapData 일반이미지를 비치는 이미지로~ (18) | 2008/04/23 |
| [AS3] 포토샵 선택툴 효과 (14) | 2008/03/10 |
| [AS3] XMLLoader 클래스. (9) | 2008/03/07 |
| [AS3] CustomTextMotion (2) | 2007/10/12 |
| [Javascript] 기본 Flash Embed 소스 (0) | 2007/09/19 |
XMLLoader.zip
이올린에 북마크하기

댓글을 달아 주세요
오늘도 여기저기 인터넷을 떠돌다.. 우야꼬님 블로그에 들어왔네요..~
2008/03/08 04:40 [ ADDR : EDIT/ DEL : REPLY ]URLLoader로 데이터를 읽어올 경우..XML 글자가 많을때 오류를 내는게 아니라 네트웍을 타고 뒤에 가비지가 따라 붙어서 XML 파싱 오류가 발생하는 것입니다...^^
이 부분은 top노드가 <result>일 경우 lastIndexOf("/>")를 이용해서 URLLoader.data에 붙어오는 { XML 이 아닌 쓰레기}들을 제거해주면 됩니다. 이렇게 하면 4000글자 뿐만 아니라 3M가 넘는 XML 파일의 경우에도 전혀~ 문제없이 잘 읽어들입니다..^^ 하지만..우리가 이런 수고를 해서 XML을 얻어야 하는것에 대해..adobe는 반성해야 합니다..-.-
아 정확한 원인을 알려주셨네요^^;;
2008/03/08 12:21 [ ADDR : EDIT/ DEL ]그러면 꼭 한글이어야 에러가 나는게 아니었나보군요.
특히 lastIndexOf() 은 머리를 스치네요.
왜 생각하지 못했을까 ㅎㅎ;;
감사합니다~
^________^
2008/03/08 16:20 [ ADDR : EDIT/ DEL : REPLY ]이 부분이 정말 황당한 경우는 가비지가 "/>"로 들어올떄도 있다는건데 {수백번에 한번 정도씩...} 이렇게 수백번에 한번이라도 안될 경우, 처음 들어온 사람에게는 그게 100%니까...ㅋㅋ
-.- 이럴 경우까지도 고려해서 lastIndexOf()로 잡아내야 해요..^^ 얼마전에 이러한 케이스가 발견되어서.. 정윤수과장님과... 한참.. 웃었던 적이 있는데..-.- 이게.. 발견이 되었으니... 웃었지.. 발견못했다면... 지금도 울고 있었을 듯..ㅋㅋ
4천자 얘기는 제가 처음 꺼낸 얘긴데... 그동안 잘못된 정보를 여기저기 흘리고 다녔군요 ㅠㅠ
2008/03/10 13:24 [ ADDR : EDIT/ DEL : REPLY ]문자열의 제일 뒤에 가비지 데이터가 붙기만 하면 얼마든지 처리할 수가 있는데, 문제는 문자열 뒤의 데이터 일부가 유실되고, 그 뒤에 가비지 데이터가 붙는 경우가 있더군요.
어도비에서 이 문제는 조속히 해결해 줘야 하는데, 아직도 소식이 없네요.
저도 바이트어레이로 읽어서 이래저래 가공하는 걸 시도해보다가, 잘 안되서 포기했었는데, URLStream을 이용하는 것은 생각 못해봈네요
2008/03/10 13:26 [ ADDR : EDIT/ DEL : REPLY ]제가 만든 XML 로더보다 훨씬 깔끔해 보이는군요 ㅎㅎ
감사감사^^
2008/03/10 13:47 [ ADDR : EDIT/ DEL ]한상훈님이 칭찬해주시니 기분좋네요 ㅎㅎ
그래도 한상훈님이 샘플주셔서 겨우 만든거에요
_(_ _)_ 감사
고수님들..존경합니다 _(__)_
2008/03/21 19:53 [ ADDR : EDIT/ DEL : REPLY ]아...아닙니다;;
2008/03/22 00:30 [ ADDR : EDIT/ DEL ]ㅎㅎ 감사합니당~^^
2008/08/06 19:01 [ ADDR : EDIT/ DEL : REPLY ]