euc-kr 과 utf-8 을 쓰는 경우의 차이...
안녕하세요,
제 홈페이지에 사용되는 cgi 프로그램 (UseModWiki 라는 위키위키입니다. perl 로 되어 있습니다) 을 수정해서, euc-kr 이 아닌 utf-8 로 출력하게 하고 싶습니다.
일단 perl 로 되어 있고 utf-8 을 기본 인코딩으로 사용하는 비슷한 위키 프로그램 (oddmuse wiki) 을 구해서 설치했습니다. 그리고 euc-kr 로 되어 있는 제 홈페이지와 oddmuse 에 동일한 텍스트를 넣어서 출력이 어떻게 다른가 보려고 했는데...
제 환경은 윈도XP 프로페셔널 서비스팩2 입니다. 근데 제 IE에서는 euc-kr 이나 utf-8 이나 동일하게 화면이 보이네요??
일단 입력은... 제가 아는 언어는 한국어와 영어밖에 없어서... 윈도우 제어판 "국가 및 언어" 옵션에서 대충 러시아어, 일본어, 중국어, 등등을 추가해서 적당히 홈페이지의 텍스트 입력 폼에 두드렸습니다. 첨부한 utf8.txt 가 그렇게 입력한 텍스트입니다. (윈도우 메모장에서 utf-8 을 선택하여 저장하였습니다)
그리고 출력을 보면.. 첨부한 그림에서, 왼쪽은 utf-8 이 기본값인 oddmuse, 가운데는 제 홈피에서 출력시 html 헤더에 charset 을 utf-8 로 해줬을 뿐인 상태, 우측은 제 홈피의 원래 상태 그대로 charset 을 euc-kr 로 하여 출력한 상태입니다. 보면 글꼴만 다를 뿐 동일한 글자들이 보이네요.
애초의 제 예상은 utf-8 의 경우는 모든 나라의 문자가 동시에 출력되지만, euc-kr 의 경우는 한글과 영어, 그리고 일부 포함되어 있는 일본어와 한자들 정도를 제외하면 다른 글자는 출력이 안 될 거라 생각했는데요. 세 경우 다 여러 나라의 문자가 다 출력되어 버리니 의아합니다. 제가 생각을 잘못 하고 있는 것인지, 아니면 euc-kr 의 경우라도 IE는 유니코드에 있는 모든 문자를 출력해 주는 것인지, 후자라면 굳이 utf-8 을 쓸 이유가 뭔지 상당히 혼동스럽습니다.
다만 위 세 경우 중 마지막 euc-kr 의 경우가 차이를 보이는 것은, 다시 저 화면에서 텍스트를 편집하는 화면으로 들어갔을 때, 앞의 두 가지는 입력 폼 (textfield)에 다시 원래의 글자들이 고스란히 들어 있는데 세번째 경우는 일부 한자가 "& # 20320;"와 같은 식으로 바뀌어 있네요. 그러니 뭔가 다르기는 다르다는 건데... 그럼 euc-kr 과 utf-8 의 차이가 이 시점 (텍스트 입력폼을 사용할 때)에 드러나는 것일까요?
음... 제가 한글 코드셋이나 웹서버의 동작에 잘 모르면서 질문을 하려니 질문 자체가 두서가 없습니다만.... 혹시 관련 분야에 잘 아시는 분 계시면 조언 좀 부탁드리겠습니다.
View Page Source를 선택하여 해당하는 문서들의 HTML 소스
View Page Source를 선택하여 해당하는 문서들의 HTML 소스 코드를 비교해 보십시오.
HTML 페이지의 form을 통해서 문자열을 입력받고, 그걸 그대로 텍스트로 저장하는 CGI가 있다고 가정합시다. UTF-8 상태에서는 그 문자들이 '그대로' 저장됩니다. 나중에 UTF-8을 지원하는 에디터로 열어보면 다국어 문자들이 그대로 보이며, 한자 한자가 일대일로 해당하는 문자와 대응됩니다.
그러나 EUC-KR인 경우에는 위에서 말씀하신 대로 &#?????; 형태로 바뀌어 저장됩니다. 확장자를 htm으로 바꾸어서 읽으면 다국어 문자들이 보이겠지만 EUC-KR을 지원하는 에디터로 읽으면 &#?????; 같은 문자들만 잔뜩 보일 뿐입니다.
http://www.w3.org/TR/html4/charset.html#h-5.3
원하시는 것이 그냥 "IE에서 다국어가 보이는 것"뿐이라면 뭐를 쓰던 상관이 없습니다. 실제로 잘 보이잖아요?
그러나 자연스러운 다국어 표현은 EUC-KR에서는 불가능합니다. IE의 EUC-KR에서의 다국어 표현은 단지 HTML character reference를 이용한 편법일 뿐입니다. 본격적으로 다국어를 사용하기를 원하신다면 유니코드 charset을 이용하시는 것이 좋습니다.
가장 간단한 경우로, 자신이 직접 편집기로 HTML 문서를 작성한다고 칩시다. EUC-KR을 사용한다면, 아랍어로 된 문장을 작성할 때 ISO10646의 테이블표를 참조해서 한자 한자 &#?????; 형태로 집어넣지 않으면 안됩니다.
http://www.kostis.net/charsets/iso10646.htm
Re: euc-kr 과 utf-8 을 쓰는 경우의 차이...
음..euckr로 인코딩되는 문자세트인 KSX-1001에는 한글, 영문, 서유럽문자, 동유럽문자, 키릴문자, 일본문자, 한문 등의 기본글자는 대부분 포함되어 있습니다. raymundo님이 입력하신 문자는 모두 KSX 문자세트에 들어가있는 글자입니다. 다만 &#..로 표시된 문자만 들어있지 않지요.
또한 윈도우에서 테스트하면 약간 혼란스러운 면이 생길겁니다. 왜냐하면 Copy & Paste 시에도 윈도우 내부적으로 유니코드 <-> 기존문자코드 간의 변환이 일어나기 때문입니다.
raymundo 형, 자세한 건 전화걸어 주시면...
Re: euc-kr 과 utf-8 을 쓰는 경우의 차이...
입력폼이 euckr일 때, 누군가 euckr에 포함되지 않은 문자를 &#.....으로 변환하는 것입니다. 그 누군가란 웹브라우저 아니면 웹서버겠죠.
일단 IE가 범인일 가능성이 높습니다. XP+IE라면 내부적으로 유니코드를 사용할 겁니다. IE의 입력폼에서 입력된 문자들은 유니코드로 IE에게 전달될 것이고, 전달된 입력문자를 IE가 웹페이지에서 지정한 언어(euckr)로 변환한 뒤, 웹서버에게 전달할 겁니다. IE가 문자를 변환하는 과정에서 euckr로 변환할 수 없는 문자는 유니코드 값을 이용해 &#..... 로 치환하리라 예상됩니다.
IE가 입력폼에서 전달받은 유니코드 문자들을 utf-8이나 euc-kr로 변환하기 때문에 raymundo님의 질문에 대한 답은 "그렇다"라고 생각합니다.
link를....
위의 3가지 경우를 test해 볼 수 있는 URL을 공개하시면 더 정확히 논의해 볼 수 있을 것 같네요.
첫번째랑 세번째는 이해가 되는데요 두번째에도 정상적으로 사용이 가능하다는 것이 이해가 안되네요. charset를 다르게 지정했는데 문제 없이 표시가 된다는 것이 좀....
Re: link를....
두번째 테스트시 입력폼의 charset이 utf-8이라면 utf-8 문자열이 웹서버에 전달되었을 것이고, 웹서버가 utf-8로 전달된 문자열을 그대로 저장했다가 출력하기 때문에 제대로 보이는 것이 당연하다고 봅니다.
답변 주신 분들 감사합니다. (marten, 전화하니 안 받는데? :D
답변 주신 분들 감사합니다. (marten, 전화하니 안 받는데? :D )
답변의 내용을 가지고 다시 테스트를 하면서 정리해 보았습니다. 잘못된 게 있으면 지적해 주시면 감사하겠습니다.
1)에서, 입력폼에 어떤 언어를 입력할 수 있는지, 여러 언어의 문자를 동시에 입력할 수 있는지는 OS와 입력기가 지원할 문제라고 생각이 됩니다. 제가 윈XP에서 입력기를 추가하여 입력을 한 것 처럼... (아니면, 이 시점에서도 A페이지의 charset의 영향을 받는 건지요?)
2)에서, submit 을 눌러 전송할 때, 전송되는 "바이트 스트림"의 내용은 A페이지의 charset에 따라 결정되는 거란 말씀이로군요. charset이 utf-8이라면 내가 입력한 문자들이 1문자당 utf-8의 해당되는 코드가 전송된다... euc-kr 이라면, euc-kr로 표현할 수 없는 문자는 &#유니코드의해당문자번호 로 변환하여 전송한다. 즉 이 시점에서 A페이지의 charset에 따라서 어떤 데이타가 저장될 지가 결정되겠군요. 또한, 제 첫 글의 예에서는 한자 몇 개만 이렇게 &#으로 변환되었고, 나머지 러시아어나 다른 언어의 문자들은 공교롭게도 "euckr로 인코딩되는 문자세트인 KSX-1001"에 포함되어 있어서 그대로 전송이 될 수 있었던 것이군요.
3)에서, 이미 2)에서 전송할 데이타가 결정되었고 여기서는 단지 전송된 데이타를 저장할 뿐이니 웹서버 프로그램이나, 웹서버 머신의 OS는 무관하다. (웹서버 설정에 따라 바뀌어 버린다면 곤란한 것이... 제가 제 홈피 cgi 를 고쳐도 의미가 없을 테니..)
4)에서.. 1)에서 utf-8로 저장한 것을 4)에서 utf-8 로 본다면 웹브라우저로 전송된 바이트 스트림을 utf-8 로 디코딩하여 출력할 테니 웹브라우저 또는 클라이언트OS가 utf-8을 지원한다면 그냥 보일 거고, 1)에서 euc-kr로 저장한 것을 4)에서 euc-kr로 본다면 이 경우 euc-kr로 표현가능한 문자는 제대로 보일 거고 &#...으로 되어 있는 것은 브라우저 선에서 (또는 클라이언트OS에서?) 유니코드를 참조하여 보여주니 사용자 입장에서는 똑같이 잘 보인다. 만일 utf-8로 저장하고 euc-kr로 보거나 그 반대로 한다면, 그냥 와자작 깨져서 보인다. (당연한건가..)
5)에서, utf-8의 경우는 상관이 없으니 euc-kr에서는 2)에서 변환된 &#...이 입력폼에 드러나게 된다.
어쨌거나, 정말 제대로 다국어를 한 화면에서 보거나 입력폼에서 편집 등을 하기 위해서는 utf-8 를 택해야 한다(이것도 당연한건가요)...
으음... 지금은 집에서 윈2000에서 테스트를 하니까 제 첫글의 두번째 경우 (기존의 제 홈피 cgi 에서 charset만 utf-8로 바꾼 경우는 편집할 때 그 몇개의 한자가 이번에는 네모박스로 나오는군요. 이것까지 이유를 따지자니 머리가 아파서... -.-;;; 어쨌거나 utf-8이 살길이다..라고 생각하고 넘어가겠습니다.
다시 한 번 답변 주신 분들께 감사합니다~ 위의 정리한 게 틀린 게 있으면 코멘트 부탁드립니다. 좋은 하루 되세요!
좋은 하루 되세요!
[quote="raymundo"]으음... 지금은 집에서 윈2000에서
으음.. 이것은 단지 글꼴의 문제였나봅니다. 굴림으로 바꿨더니 해당 한자가 나오네요.
좋은 하루 되세요!
앗, 전화를 못받았습니다. 잠에 취해서...[quote="raym
앗, 전화를 못받았습니다. 잠에 취해서...
MS윈도우에서 텍스트 출력시 네모박스와 물음표는 쓰임이 다릅니다. 현재 지정된 문자세트에는 포함된 글자이지만 폰트에는 없는 글자는 네모박스로 출력합니다. 그리고 현재의 문자세트에 포함되지 않은 글자는 물음표로 출력합니다.
charset은 HTML 소스 코드의 인코딩을 지정하는 것이고, 이로 인
charset은 HTML 소스 코드의 인코딩을 지정하는 것이고, 이로 인해 HTML에서 표현할 수 있는 글자가 제약받지는 않습니다. 예컨대 charset=US-ASCII에서도 소스 코드 자체가 US-ASCII로 되어 있기만 하면 얼마든지 한 와 같이 한글을 표현할 수 있습니다. 즉 EUC-KR로 된 HTML 문서에서도 NCR을 써서 외국어를 표현할 수는 있는 것이지요. (다만 plain text로는 불가능합니다.)
그리고 form submission과 관련된 문제에 대해서는 다음 웹페이지를 참고하시면 도움이 될 겁니다.
http://ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html
charset은 HTML 소스 코드의 인코딩을 지정하는 것이고, 이로 인
charset은 HTML 소스 코드의 인코딩을 지정하는 것이고, 이로 인해 HTML에서 표현할 수 있는 글자가 제약받지는 않습니다. 예컨대 charset=US-ASCII에서도 소스 코드 자체가 US-ASCII로 되어 있기만 하면 얼마든지 한 와 같이 한글을 표현할 수 있습니다. 즉 EUC-KR로 된 HTML 문서에서도 NCR을 써서 외국어를 표현할 수는 있는 것이지요. (다만 plain text로는 불가능합니다.)
그리고 form submission과 관련된 문제에 대해서는 다음 웹페이지를 참고하시면 도움이 될 겁니다.
http://ppewww.ph.gla.ac.uk/~flavell/charset/form-i18n.html
댓글 달기