googleAdsense_widever


Flex :: HTTPService로 DB와 통신할 때, 한글 깨짐 해결하기 종결자 Programing . Common

HTTPService로 xml을 출력해서 한글을 쳐보낸다면 그 한글은 깨져버린다.

인터넷에 돌아다니는 해결책 중에는
initialize="System.useCodePage = true;
로 선언하라는 부분이 있는데 이건 뭐냐하면, 기본적으로 flex에서는 unicode로만 인식을 하는데, 그 언어셋을 사용자의 컴퓨터환경에 맞게 바꾼다는 것이다.
하지만 이렇게 선언하고 DB에서 collation을 한국실정에 맞는 euc-kr로 지정하면, 다른 언어셋을 사용하는 컴퓨터환경에서는 정상작동을 하지 못한다.


XML은 <?xml version="1.0" encoding="utf-8"?>로 설정을 해주고
xml을 저장할때 파일형식을 ANSI 말고 UTF-8로 저장을 해주면 된다.
라는 말도 있는데, 역시나 내 프로젝트에서는 DB문제도 끼어있는 상황이라 해결책이 되지 못한다.

이 때는, 한글이 포함되는 부분은 HTTPService에서 일단 떼어내서, XML이 아닌 text로 출력하되, mxml에서 escape로 한글을 인코딩하여 보내주는 것이다. 당연히 DB에는 escape로 인코딩된 값이 저장되며, 따라서 다시 읽어올 때도 mxml에서 unescape로 디코딩하여 viewing 하면 된다.

<mx:HTTPService id="Set" method="GET" useProxy="false" url="set.php" resultFormat="text">
<mx:request xmlns="">
<korean>{korean}</korean>
</mx:request>
</mx:HTTPService>

<mx:HTTPService id="Get" method="GET" useProxy="false" url="get.php" resultFormat="text" result="get(event)">
<mx:request xmlns="">
<korean>{korean}</korean>
</mx:request>
</mx:HTTPService>

이렇게 HTTPService를 선언하고,
korean = escape(string);
Set.send(); 
하여 DB로 보내고

Get.send(); 
get(event:ResultEvent){
string = unescape(event.result.toString()); 
}
하여, 다시 받는 것이다.
이 때, DB의 Collation은 euc-kr이던, utf_general_ci 이던 상관없고,
PHP파일의 파일인코딩 역시 ANSI이던, utf-8이던 상관이 없다.

data의 길이가 크게 중요하지 않은 경우 가장 좋은 해결책이 아닌가 싶다.



p.s. 어휴 씨발 지나간 시간봐라 덕후의 향기가 솔솔피어올라 새벽공기를 감염시켜 분노바이스러스를 일으켜, 인간구제역 유발하려하네

p.s.2 
웹 각종 en/decode 실행기 : http://tools.web-max.ca/encode_decode.php

p.s.3
어? 그런데, 위 링크의 URLencode와 escape는 결과가 다르다.
"그 변환된 형식은 16진수 형식으로 표시되며 1바이트 문자는 %XX 형태로, 2바이트 문자는 %uXXXX 형태로 변환된다."
이게 escape의 설명인데, urlencode는 한글도 전부 %XX로 인코딩해낸다. 어쨌든 DB Collation에 영향을 받지 않는다.

p.s.4 
한글도 2바이트로 변환하는 올바른 툴 페이지 링크 : http://www.linkedresources.com/tools/unescaper_v0.2b1.html
위 페이지 변환이 안된다 (2012/01/17)



추가 참고 
http://blog.flashplatform.kr/195
http://airdev.tistory.com/397
http://suya55.tistory.com/263

덧글

댓글 입력 영역


공지

어서오십시오.
트위터 : @FCliver
기저심리학 : 네이버카페
카카오톡 : FCliver
페이스북 : Fredric Cliver

통계 위젯 (화이트)

714
104
285309

접속자 위치