본문 바로가기

ActionScript/AS3.0

URLLoader 한글깨짐 현상


예전 AS2 LoadVar 시절, 외부데이터를 이용할 경우 
System.useCodePage = true 한방이면 거의 모든게 해결이 되었다.
하지만 점점 까탈스러워지는 as...




먼저 useCodePage 레퍼런스내용
----------------------------------------------------------------------------------------------------------------

외부 텍스트 파일을 해석하는 데 사용할 코드 페이지를 지정하는 부울 값입니다. 이 속성을 false로 설정하면 외부 텍스트 파일이 유니코드로 해석됩니다. 이러한 파일은 저장할 때 유니코드로 인코딩되어야 합니다. 이 속성을 true로 설정하면 외부 텍스트 파일이 응용 프로그램이 실행되는 운영 체제의 일반 코드 페이지로 해석됩니다. useCodePage의 기본값은 false입니다

   useCodePage를 true로 설정하는 경우 응용 프로그램이 실행되는 운영 체제의 일반 코드 페이지에 외부 텍스트 파      일에 사용되는 문자가 포함되어 있어야 텍스트가 표시됩니다

----------------------------------------------------------------------------------------------------------------

몬말이냐하면 true로 설정하면 울나라 어지간한 컴터에서는 EUC-KR로 처리한다는 소리.
하지만 문제는 as3에서 URLLoader를 이용할경우

dataFormat을 variables로 설정하면 useCodePage를 true로 설정하여도 한글이 깨지게 된다.

왜??십ㅁ올밍ㄴ;로민아로미로 왜ㅐㅐㅐㅐㅐㅐ???





아래는 dataFormat 레퍼런스내용
----------------------------------------------------------------------------------------------------------------
dataFormat : String = "text"
다운로드하는 데이터를 텍스트(URLLoaderDataFormat.TEXT), 원시 이진 데이터(URLLoaderDataFormat.BINARY) 또는 URL 인코딩된 변수(URLLoaderDataFormat.VARIABLES) 중 어떤 형식으로 수신할 것인지 제어합니다.
----------------------------------------------------------------------------------------------------------------

URL 인코딩된....URL 인코딩된....URL 인코딩된....URL 인코딩된....URL 인코딩된....URL 인코딩된....URL 인코딩된....
그렇다면 어떻게 해야 할까??
역시 모든해답은 레퍼런스에 있다.





레 투더 퍼
----------------------------------------------------------------------------------------------------------------

모든 플랫폼에서 응용 프로그램에 사용된 외부 텍스트 파일을 볼 수 있게 하려면 모든 외부 텍스트 파일을 유니코드로 인코딩하고 useCodePage를 false로 설정된 상태로 두어야 합니다. 이렇게 하면 응용 프로그램(Flash Player 6 이상 버전)은 텍스트를 유니코드로 해석합니다.

----------------------------------------------------------------------------------------------------------------

as3에서 URLLoader를 이용할경우
useCodePage는 false로 놔둔채 텍스트를 유니코드로 인코딩채로 받아야 한다.

ex)
$txt=iconv("EUC-KR","UTF-8",$txt);
echo $txt;


하지만 이렇게 쉽게 끊나지않는다.
URLVariables 를 이용해서 데이터를 넘길땐 한글이 깨진다는것 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ 어쩔

제일 간단한 것은 귀찮더라도 플래시에서 보낼 문자열을 하나하나 URL인코딩해서 넘기는 것이다.
encodeURIComponent () 함수  
public function encodeURIComponent(uri:String):String

언어 버전:  ActionScript 3.0
런타임 버전:  AIR 1.0 Flash Player 9

문자열을 유효한 URI 구성 요소로 인코딩합니다. 문자가 기본 문자의 매우 작은 그룹에 속하지 않은 경우 URI의 하위 문자열을 모든 문자가 UTF-8 이스케이프 시퀀스로 인코딩된 문자열로 변환합니다

위의 함수를 이용하면된다.

다른 방법은 그냥 useCodePage를 보낼땐 true로 받을땐 false로 받으면 된다.

 예를 들면 URLLoader의 load명령전 System.useCodePage=true; 를 넣고 
open 이벤트가 일어날때 System.useCodePage=false;를 넣어주는 것이다.

단 이럴 경우 한글이 그대로 전달되기 때문에 몇몇의 특수문자가 문제를 일으킬수있다 (< > & 등등)








xml
xml 데이터라면 useCodePage 를 true로 하고
dataFormat을 text로 설정하면 그냥 다 ok

추가로 xml 연동에 있어서 생기는 인코딩 문제는 아래분들의 포스팅에서 대부분 해결