상세 컨텐츠

본문 제목

액션스크립트 actionScript 한글 포함 url 인식 인코딩 깨짐 URLLoader 한글깨짐 현상 관련

ADOBE/ ActionScript

by AlrepondTech 2020. 9. 22. 04:37

본문

반응형

 

 

 

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

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

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

 

 

 

 

출처: 여기

URL 을 로드했을때 한글이 포함 되어있는 URL로드 시 해결 방법

public function load(url:String, cb:Function):void

		{

			System.useCodePage = true;  

			_callback = cb;

			

			var l:URLLoader = new URLLoader();

			l.addEventListener(Event.COMPLETE, completeHandler);

			l.addEventListener(Event.OPEN, openHandler);

			l.addEventListener(ProgressEvent.PROGRESS, progressHandler);

			l.addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler);

			l.addEventListener(HTTPStatusEvent.HTTP_STATUS, httpStatusHandler);

			l.addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler);

			



		     //이부분을 encodeURI 사용하여 읽어주면 한글부분 url 부분도 인식할수 있게 인코딩

                     var enUrl:String = encodeURI(url);

			

			var request:URLRequest = new URLRequest(enUrl);

			

			try 

			{

				l.load(request);

			} 

			catch (e:IOError) 

			{

				trace(e.message);

			}

		}

 

 

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

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

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

 

 

 

츌처: http://mwultong.blogspot.com/2006/10/encodeuri-encodeuricomponent-escape.html

 

자바스크립트(JavaScript)에서는 다음의 함수들로, HTML 페이지 주소를 인코딩/디코딩합니다.

encodeURI() / decodeURI()
최소한의 문자만 인코딩합니다.
; / ? : @ & = + $ , - _ . ! ~ * ' ( ) #
이런 문자는 인코딩하지 않습니다.
http:// ... 등은 그대로 나옵니다.


encodeURIComponent() / decodeURIComponent()
알파벳과 숫자 Alphanumeric Characters 외의, 대부분의 문자를 모두 인코딩합니다.
http:// ... 가 http%3A%2F%2F 로 됩니다.



escape() / unescape()
예전부터 있던 오래된 함수입니다. encodeURI() 와 encodeURIComponent() 의 중간 정도의 범위로 문자를 인코딩합니다.


encodeURI, encodeURIComponent, escape 함수 사용 예제

 

<html>

<body>

<script type="text/javascript">
  var s;

  s = encodeURI('http://www.google.co.kr/소 설.html');
  document.write('<p>' + s + '<p>');
  // 출력 결과: http://www.google.co.kr/%EC%86%8C%20%EC%84%A4.html


  s = encodeURIComponent('http://www.google.co.kr/소 설.html');
  document.write('<p>' + s + '<p>');
  // 출력 결과: http%3A%2F%2Fwww.google.co.kr%2F%EC%86%8C%20%EC%84%A4.html


  s = escape('http://www.google.co.kr/소 설.html');
  document.write('<p>' + s + '<p>');
  // 출력 결과: http%3A//www.google.co.kr/%uC18C%20%uC124.html
</script>

</body>
</html>




어떤 함수든 "공백 문자" 즉 스페이스는 %20 으로 치환합니다. 그러나 주소의 공백은 없어야 합니다.

 

 

 

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

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

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

 

 

 

출처: http://mwultong.blogspot.com/2006/10/urlencode-encoding-javascript.html

 

http://www.google.co.kr/소설.html
HTML에서 이런 한글이 섞인 주소는 오작동할 수 있기에

http://www.google.co.kr/%EC%86%8C%EC%84%A4.html
이런 식으로 이스케이프 해주어야 합니다.


다음과 같은 3가지 함수 중 하나로 한글 주소를 인코딩할 수 있습니다.

* encodeURI() : decodeURI()
* encodeURIComponent() : decodeURIComponent()
* escape() : unescape()

encodeURI() 가 적당합니다. 다만, 주소 전체를 http://부터 모두 인코딩하기 위해서는 encodeURIComponent 를 사용합니다.

인코딩된 한글 주소를 다시 복원하기 위해서는 각각의 함수에 대응되는 디코딩 함수를 사용합니다.




▶▶ encodeURI, encodeURIComponent, escape 함수 차이점; 자바스크립트

▶▶ JavaScript Tools: Decode/Encode URI Strings

▶▶ 블로그 게시물에 '딜리셔스del.icio.us(delicious) 추가 링크' 만들기

☞ HTML/CSS/JavaScript

 

 

 

 

반응형

 

728x90

 

 

 

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

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

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

 

 

 

출처: http://msdn.microsoft.com/ko-kr/library/ie/xh9be5xc(v=vs.94).aspx

 

encodeURI 함수(JavaScript)

텍스트 문자열을 유효한 URI(Uniform Resource Identifier)로 인코딩합니다.

encodeURI(URIString)

 

설명

필수 URIString 인수는 인코딩된 URI를 나타내는 값입니다.

encodeURI 함수는 인코딩된 URI를 반환합니다. decodeURI에 결과를 전달하면 원래 문자열이 반환됩니다.encodeURI 함수는 ":", "/", ";", "?" 등의 문자를 인코딩하지 않으므로 이 문자들을 인코딩하려면encodeURIComponent를 사용합니다.

예제

다음 코드는 URI를 먼저 인코딩한 다음 디코딩합니다.

 

JavaScript

var uriEncode = encodeURI ("http://www.Not a URL.com");
var uriDecode = decodeURIComponent(uriEncode);

document.write(uriEncode);
document.write("<br/>");
document.write(uriDecode);

// Output:
// http://www.Not%20a%20URL.com
// http://www.Not a URL.com

요구 사항

지원되는 문서 모드: Quirks, Internet Explorer 6 표준, Internet Explorer 7 표준, Internet Explorer 8 표준, Internet Explorer 9 표준, Internet Explorer 10 표준, Internet Explorer 11 표준. 스토어 앱에서도 지원됩니다(Windows 8 및 Windows Phone 8.1). 버전 정보를 참조하십시오.

참고 항목

참조

decodeURI 함수(JavaScript)

decodeURIComponent 함수(JavaScript)

 

 

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

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

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

 

 

 

출처: http://lpesign.tistory.com/106

 

예전 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;를 넣어주는 것이다.

 

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

 

 

접기

_req=new URLRequest(서버사이드주소)

_urlLoader=new URLLoader ();
_urlLoader.dataFormat=URLLoaderDataFormat.VARIABLES;
_urlLoader.addEventListener(Event.OPEN,onOpen);
_urlLoader.addEventListener(Event.COMPLETE,onComplete);

private function loadData():void{
     System.useCodePage=true;
     var variables:URLVariables = new URLVariables();
     variables.hangul = "내가고자라니";
     _req.data=variables;
     _urlLoader.load(_req);
}

private function onOpen(e:Event):void{
     System.useCodePage = false;     
}

private function onComplete(e:Event):void{
     trace(_loader.data.hangul)
}

접기

 

xml

xml 데이터라면 useCodePage 를 true로 하고

dataFormat을 text로 설정하면 그냥 다 ok

 

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

 

http://hangunsworld.com/blog/259

 

http://airdev.tistory.com/397

 

 

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

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

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

 

 

반응형


관련글 더보기

댓글 영역