Category :
Open Bluedragon
,
Railo
Comments :
2 Comments
Posted by
장창학
at
6:33 AM
우리가 웹 Application을 개발할때, URL변수에 값을 담아 Get방식으로 데이터를 전송할때가 많습니다. 대부분의 경우 영어로 된 변수값인 경우 문제가 발생하지 않지만, 한국어, 일본어 등 2Byte문자가 데이터로 전송될때 문제가 발생합니다. 그래서 구글 등의 검색엔진들은 검색어가 한국어인경우 URL인코딩을 통하여 한국어를 전송하게 되는데, 가령, 구글에서 "콜드퓨전"이라는 검색어를 던지게 되면 URL인코딩된 값은 %EC%BD%9C%EB%93%9C%ED%93%A8%EC%A0%84가 됩니다.
ColdFusion을 개발할때도 이런 문제점을 해결하려면 ColdFusion에서 제공하는 함수인 URLEncodedFormat()과 URLDecode() 함수를 이용해야 합니다. Adobe ColdFusion이나, Railo 또는 Open BD 등의 ColdFusion서버환경에서 이러한 것들을 모두 동일하게 처리해 주냐? 답은 아니다 입니다. Adobe ColdFusion이야 업계표준이기 때문에 지원을 잘 하고 있고, Railo 역시 Adobe ColdFusion의 표준을 충실히 따르는 엔진이므로 정상적으로 지원을 해 줍니다만, Open BD나 BlueDragon에서는 문제가 발생하더군요. 아직, 버그로 처리해야 할 문제가 아닌가 싶습니다.(Open BD 이슈트래커에 등록하려고 합니다만, 늘 고민인것이 하고픈 말을 영어로 쓰기가 참 어렵습니다. ㅠㅠ 가급적 정확한 표현을 하고 싶은데)

<Railo URLEncodedFormat() URLDecode()>
<OpenBD URLEncodedFormat() URLDecode()>
다음의 코드를 살펴보시길 바랍니다. 왜 하늘은 파랗지? 라는 문장을 각각 URLEncodedFormat()함수를 써서 URL인코딩 데이터으로 변경하고, 변경된 데이터를 다시 URLDecode()함수로 원래의 데이터로 다시 변환하는 코드입니다. 그런데 값이 동일하지 않습니다. 두 시스템 모두 JDK의 파일 및 데이터처리는 UTF-8포맷으로 지정되어 있습니다. .bash_profile 환경에서 강제로 지정했고, 또 저장된 cfml문서 역시 동일하게, UTF-8인코딩으로 저장되었습니다. 자신의 JDK환경의 시스템 로케일을 ColdFusion으로 알아보려면 다음의 코드를 작성하고 저장한 후 브라우저에서 조회하면 됩니다.
JDK Locale Check
<cfoutput>#createObject( "java", "java.lang.System" ).getProperty( "file.encoding")#</cfoutput>
URLEncodedFormat() / URLDecode comparison
<cfprocessingdirective pageencoding="UTF-8">
<cfset setEncoding("URL", "UTF-8")>
<cfset MyString="왜 하늘은 파랗지?">
<cfset EncodedString=URLEncodedFormat(MyString)>
<cfset DecodedString=URLDecode(EncodedString)>
<cfoutput>
Original String: #MyString#<br>
URL Encoded: #EncodedString#<br>
Decoded: #DecodedString#
</cfoutput>
Open BD에서는 URLEncodedFormat의 Charset를 명시적으로 유니코드로 선언하면 됩니다.(열이아빠님 힌트)
<cfprocessingdirective pageencoding="UTF-8">
<cfset setEncoding("URL", "UTF-8")>
<cfset MyString="왜 하늘은 파랗지?">
<cfset EncodedString=URLEncodedFormat(MyString, "UTF-8")>
<cfset DecodedString=URLDecode(EncodedString)>
<cfoutput>
Original String: #MyString#<br>
URL Encoded: #EncodedString#<br>
Decoded: #DecodedString#
</cfoutput>
결론은 아직 한국적(또는 2Byte 문자권) 상황에서는 Open BD로 개발할때 GET으로 한글데이터를 전송하는데 문제가 있으므로 주의해야 합니다.(아마 POST도 마찬가지 일 것 같습니다.)

|


ColdFusion (73)
Comments
문제는 대부분의 국내 디자이너/개발자들이 UTF-8보다는 EUC-KR를 선호하기때문에 GET방식으로 한글URL또는 파라미터를 전송하게 되면 모두 깨져버립니다. 그리고 Firefox처럼 비IE계열의 브라우저는 서버, 웹페이지가 모두 UTF-8를 지원하면 한글파일명을 링크걸어도 문제없이 열어주지만 MS IE는 도구-설정에서 URL을 UTF-8로 보냄이란 것에 체크를 해야만 문제가 없게 됩니다. 그러나 그걸 하는 사람이 거의 없죠. 뭣때문이 있는지도 거의 모르고..
Mac운영체제나 대부분의 Linux, Unix운영체제는 거의 UTF-8를 기본시스템 인코딩으로 쓰고 있습니다. MS의 Windows만 MS949란 인코딩을 쓰고 있고 대부분의 PC사용자들이 Windows를 쓰고 있기 때문에 안전하게 URL파라미터에서 한글을 쓰고자 URLEncoding이란 작업을 하게 됩니다.
특별한 유틸리티는 없습니다만, 구글검색창에서 한글검색어를 입력하면 결과URL에서 search?q= 다음에 오는 문자열이 URL인코딩된 것입니다. 하지만 같은 구글이여도 우분투처럼 UTF-8기본 인코딩환경에서는 search?q=다음의 문자열은 그대로 한글로 보여집니다.
UTF-8의 장점은 여러언어를 특별한 다른 도구없이 모두 표현이 가능하는 것입니다. EUC-KR로 작성된 HTML문서내에서는 일본어나, 중국어, 히브리어 등을 동시에 표기할 수 없습니다. 하지만 UTF-8로 작성된 HTML문서는 가능합니다. 도움되셨는지요.