하나씩 각개격파!

하핫!!! 드뎌 익스플로러6 에서 escape한 값을 화면에 찍는데 성공했다!!! 상황을 다시 한번 정리하자면,

익스6의 자바스크립트 함수에서 한글이 들어간 URL을 escape한다. cgi에서 넘겨받은 URL의 파라미터의 한글값을 읽지 못한다. cgi에서 출력한 한글을 넘겨받은 자바스크립트가 출력하면 한글이 와장창 깨진다.

원인은 이렇다. 익스플로러6은 내부적으로 unicode로 동작한다. 따라서 한글이 들어간 URL을 escape할때도 한글 값을 해당 unicode 값으로 치환해서(예를들어 한 ==> %uD55C, ‘한’의 unicode값이 ‘D55C’ 다) 넘긴다. 우리쪽 cgi는 %HH 방식, 즉 0-9,a-z,A-Z, 몇가지 특수기호(자세한건 RFC URL Escape 관련 문서를 찾아보라)를 제외한 모든 문자를 ascii 코드값을 16진수로 변환해서 %HH로 출력하는 방식을 사용하기 때문에 스크립트와 cgi가 주고받는 값들을 서로 인식하지 못해서 한글이 와장창 깨지는 것이다.

해결방법은 이렇다. 일단 쿼리 로그를 비롯해서 다른 모든 데이터들이 %HH 방식으로 동작하므로 브라우저에서 넘겨받은 unicode를 일단 파싱을 해서 코드값만 추려낸 다음에 UTF-8로 변환을 한다([http://nlp.kookmin.ac.kr/data/unitoutf.html 변환하는 루틴은 국민대 강승식 교수의 자연어처리 연구실 홈페이지에 가면 자료를 찾을 수 있다]). 이렇게 변환을 하면 OS의 iconv 라이브러리를 이용해서 euc-kr로 변환해서 쌓아둔 로그를 가지고 작업을 할 수 있게 된다.

화면에 출력할 때는 UTF-8 로 출력을 한다(이걸 몰라서 어제 하루종일 삽질했다). 유니코드 값을 뿌린다고 브라우저가 알아먹는것이 아니라는 것을 꼭 명심하라. 반드시 UTF-8로 변환을 해야 익스플로러6이 알아 먹는다. 익스플로러5는 또 얘기가 다르다. 이 녀석은 우리 cgi가 동작하는 %HH 방식대로 동작한다. 이 녀석에 대한 처리는 아직 못 했다. 아직 모질라에서는 테스트를 못해봤고 테스트 할 여력이 못 된다. 나 또한 싸이월드를 모질라에서도 잘 돌게 제대로 안짰다고 욕하지만, 모질라까지 잘 돌게 할 힘도 열정도 남아 있지 않다. 브라우저 종속적인 코드는 사용하지 않았으니 잘 돌거라 믿는다. 나중에 여력이 되면 테스트 해보자.

관련글은 [http://iam312.pe.kr/moniwiki/wiki.php/NaverRecommendKeyword 여기]로.

답글 남기기

아래 항목을 채우거나 오른쪽 아이콘 중 하나를 클릭하여 로그 인 하세요:

WordPress.com 로고

WordPress.com의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Google photo

Google의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Twitter 사진

Twitter의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

Facebook 사진

Facebook의 계정을 사용하여 댓글을 남깁니다. 로그아웃 /  변경 )

%s에 연결하는 중