상세 컨텐츠

본문 제목

액션스크립트 actionscript Flash Player 11.8.800.168 한글 깨짐 현상 url 로드에러 현상 url 불러오기 에러

ADOBE/ ActionScript

by AlrepondTech 2014. 11. 21. 00:46

본문

반응형

 

 

 

 

=================================

=================================

=================================

 

 

 

 

 

안드로이드 에서 플래시11 버전에도 한글 url이 안불러지는데 이현상과 관련이 있을 것 같다.

 

출처: http://wit.nts-corp.com/2013/09/27/183

 

2013년 9월  배포된 플래시 플레이어 11.8.800.168과  11.8.800.174  에서 한글 깨짐 현상이 있었습니다.

추석 전후에 일어난 장애라 대응 또한 쉽지 않았는데요.

 

자세히 알아보도록 하겠습니다.

먼저 168버전의 버그입니다.

Flash에서 javascript함수를 호출하고 인자로 한글을 넘길경우, 한글이 깨지는 문제입니다.

 

해결방법은 여러가지가 있겠지만 우리는 url encoding 처리를 하였습니다.

그런 다음 javascript에서 인자를 url decoding 하면 해당 문제는 해결 됩니다.

Flash 수정과 같이 javascript의 수정이 같이 이루어지기 때문에 이런 구조가 여러 서비스에서 사용 중일 경우

javascript를 찾아 일일이  수정하기가 어려울 수 있습니다.

이럴 땐 Flash에서 아래와 같이 수정하여 처리도 가능합니다.  javascript정의를 Flash에서 하는 방식입니다.

다만 호출 부분을 문자열 하나로 조합을 해야 하니 전송할 인자 갯수가 많을 경우 문자열 결합을 잘 하셔야 합니다.

 

다음, 174버젼의 버그입니다.

174버젼은 168버전과 반대 상황의 이슈입니다.

이번에는 Javascript에서 Flash의 함수를 호출하고 한글인자를 보낼때 깨지는 문제입니다.

 

대응방법은 위와 비슷합니다. 아래는 Flash가 호출할 javascript함수입니다. Flash로 데이터를 보내기전에 escape 함수를 통해 url encoding 처리를 합니다.

Flash에서는 위의 함수 호출 후 리턴받은 한글 데이터를 unescape를 통해 url decoding 합니다.

 

Actionscript 에는 escape-unescape 함수와 유사한  encodeURIComponent-decodeURIComponent 함수가 존재하는데

이 함수를 이용할 경우 [ ' ] 와 같은 특수문자의 url encoding이 안되므로  [ ' ] 을 사용함으로 문자열 구간 지정이 잘못된다면 escape가 좀 더 안정적일 것 같습니다.

 

9월 27일 현재 168과 174가 다 해결된 175버전이 adobe사이트를 통해 배포가 되었습니다.

168, 174가 2주 정도의 짧은 기간동안 퍼졌지만 그래도 여러 사람이 사용중일 수 있으니 위와 같은 처리가 필요합니다.

위와 같은 처리를 하여도 175에서 문제가 발생하지는 않습니다.

 

 

 

 

 

=================================

=================================

=================================

 

 

 

플래시 플레이어 한글 이슈 (버전 11.8.800.164 & 11.8.800.174)

 

플래시 플레이어 11.8.800.168 버전에서는

ExternalInterface.call 을 통해 한글을 전달하면 문자가 깨집니다.

 

 

 

해결방법은

플래시에서 escapeencodeURIencodeURIComponent을 통해 인코딩 하고

자바스크립트에서 unescapedecodeURIdecodeURIComponent를 이용해 디코딩하여 문제해결이 가능합니다.

 

또는 자바스크립트에서 디코딩하지 않도록 아래와 같이 처리도 가능합니다.

ExternalInterface.call("functionName(unescape('" + escape("한글문자") + "'))");

ExternalInterface.call("functionName(unescape('" + escape("한글문자") + "')," + "unescape('" + escape("한글문자") + "')"  + ")");

 

자신이 보내는 문자에 따라

아래의 인코딩되지 않는 문자를 참조하여 인코딩 방식을 설정합니다.

 

[escape 함수를 통해 이스케이프 시퀀스로 변환되지 않는 문자]

인코딩되지 않는 문자
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
@ - _ . * + /

[encodeURI 함수를 통해 UTF-8 이스케이프 시퀀스로 변환되지 않는 기분 문자]

인코딩되지 않는 문자
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
; / ? : @ & = + $ , #
- _ . ! ~ * ' ( )

[encodeURIComponent 함수를 통해 UTF-8 이스케이프 시퀀스로 변환되지 않는 문자]

인코딩되지 않는 문자
0 1 2 3 4 5 6 7 8 9
a b c d e f g h i j k l m n o p q r s t u v w x y z
A B C D E F G H I J K L M N O P Q R S T U V W X Y Z
- _ . ! ~ * ' ( )

 

플래시 플레이어 11.8.800.174 버전에서의 문제는

ExternalInterface.call 에서 한글로 된 문자열을 반환받으면 'undefined'라 나옵니다.

 

해결방법은

11.8.800.168 버전과 반대로

자바스크립트에서 인코딩하고 플래시에서 디코딩하여 처리합니다.

 

자바스크립트 코드

function getName(){

return escape("홍길동");

}

 

플래시 코드

var name:String = unescape(ExternalInterface.call("getName"));

-> name: 홍길동

 

 

=================================

=================================

=================================

 

 

 

반응형


관련글 더보기

댓글 영역