한상훈님의 말씀에 의하면
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 일반이미지를 비치는 이미지로~ (19) | 2008.04.23 |
[AS3] 포토샵 선택툴 효과 (16) | 2008.03.10 |
[AS3] XMLLoader 클래스. (14) | 2008.03.07 |
[AS3] CustomTextMotion (2) | 2007.10.12 |
[Javascript] 기본 Flash Embed 소스 (0) | 2007.09.19 |
-
신명용 2008.03.08 04:40
오늘도 여기저기 인터넷을 떠돌다.. 우야꼬님 블로그에 들어왔네요..~
URLLoader로 데이터를 읽어올 경우..XML 글자가 많을때 오류를 내는게 아니라 네트웍을 타고 뒤에 가비지가 따라 붙어서 XML 파싱 오류가 발생하는 것입니다...^^
이 부분은 top노드가 <result>일 경우 lastIndexOf("/>")를 이용해서 URLLoader.data에 붙어오는 { XML 이 아닌 쓰레기}들을 제거해주면 됩니다. 이렇게 하면 4000글자 뿐만 아니라 3M가 넘는 XML 파일의 경우에도 전혀~ 문제없이 잘 읽어들입니다..^^ 하지만..우리가 이런 수고를 해서 XML을 얻어야 하는것에 대해..adobe는 반성해야 합니다..-.- -
신명용 2008.03.08 16:20
^________^
이 부분이 정말 황당한 경우는 가비지가 "/>"로 들어올떄도 있다는건데 {수백번에 한번 정도씩...} 이렇게 수백번에 한번이라도 안될 경우, 처음 들어온 사람에게는 그게 100%니까...ㅋㅋ
-.- 이럴 경우까지도 고려해서 lastIndexOf()로 잡아내야 해요..^^ 얼마전에 이러한 케이스가 발견되어서.. 정윤수과장님과... 한참.. 웃었던 적이 있는데..-.- 이게.. 발견이 되었으니... 웃었지.. 발견못했다면... 지금도 울고 있었을 듯..ㅋㅋ -
Han Sanghun 2008.03.10 13:24
4천자 얘기는 제가 처음 꺼낸 얘긴데... 그동안 잘못된 정보를 여기저기 흘리고 다녔군요 ㅠㅠ
문자열의 제일 뒤에 가비지 데이터가 붙기만 하면 얼마든지 처리할 수가 있는데, 문제는 문자열 뒤의 데이터 일부가 유실되고, 그 뒤에 가비지 데이터가 붙는 경우가 있더군요.
어도비에서 이 문제는 조속히 해결해 줘야 하는데, 아직도 소식이 없네요. -
Han Sanghun 2008.03.10 13:26
저도 바이트어레이로 읽어서 이래저래 가공하는 걸 시도해보다가, 잘 안되서 포기했었는데, URLStream을 이용하는 것은 생각 못해봈네요
제가 만든 XML 로더보다 훨씬 깔끔해 보이는군요 ㅎㅎ -
-