Thursday, February 02, 2006
한국어(euc-kr) 페이지에서 중국식 한자 구현
일본 한자들은 한국 한자와 큰 차이가 없어서, 한국 한자로 별다른 무리 없이 변경해 쓸 수 있지만, 중국 한자들은 간체자도 있고 희귀 한자도 많아서, 표현이 힘들다.
한국어(euc-kr) 텍스트 인코딩에서는 한국식 한자들만 표현할 수 있다. 물론 유니코드로는 전세계 모든 문자를 하나의 인코딩으로 표현할 수 있어 편리하지만, 한글 웹페이지를 유니코드(UTF-8)로 굳이 작성할 필요는 없다. 유니코드(UTF-8)는 다소 사치스러운 인코딩이다. euc-kr에는 한글 1개를 2바이트로 표현하지만, UTF-8에서는 3바이트로 표현하기에 파일의 용량이 커져서 서버에 부담을 줄 수도 있다. (다만 영문, 숫자, 기호, 공백 등은 여전히 1바이트)
그런데, 다행히 HTML 문법에서는 텍스트의 일부만을 유니코드로 표현하는 방법을 제공한다. 즉, 웹페이지의 인코딩은 euc-kr로 놔두고, euc-kr로 표현할 수 없는 일부 문자들만 유니코드로 기술하는 것이다. (※ 참고로, 지금 이 블로그는 인코딩이 UTF-8이기에, 이런 방법을 쓰지 않아도 중국식 한자를 쓸 수 있다.)
가령 중국 도시 이름인 선전(深圳)를, 선전(深<土+川>) 으로 흔히 표기하는데, 페이지의 인코딩을 바꾸지 않고도 정확히 표현할 수 있는 방법이 있다.
深圳의 두 번째 글자 "논두렁 수"자는 euc-kr에는 없다. 한국식 한자가 아니거나 또는 희귀 한자여서 그럴 것이다. (두 번째 글자 "논두렁 수"자, 즉, "土(흙 토)변에 川(내 천)의 한자"가 현재 보이지 않는 분은, 컴퓨터에 중국어 폰트가 없기 때문이다. 윈도XP에는 기본적으로 설치되어 있다.)
"논두렁 수"자인, "圳"자의 유니코드 코드값은 "U+5733".
16진수인 "5733"을, 윈도 계산기의 공학용 버전을 사용해, 십진수로 바꾸어 보면 "22323".
결국 다음과 같이 기술하면 "논두렁 수"자가 한글 웹페이지에 표현된다.
深圳
그러나 다른 많은 임의의 한자들의 코드를 이렇게 직접 적어 주는 것은 힘들다. 이때 EmEditor를 사용하면 간단해진다.
아래는 EmEditor를 사용하여 간단히 변환하는 방법이다:
(0) 중국식 한자가 섞인 한국어 문서를 유니코드 인코딩으로 작성한다. (MS워드로 작성하거나, 텍스트 에디터에서라면 우선 빈 문서를 만든 후 유니코드로 변환해 준다. 울트라에디터에서는 다국어 동시 표현이 힘들고 아무래도 EmEditor가 좋다. 아래아한글도 '한글97'보다 높은 버전에서는 유니코드를 사용할 것이다.)
(1) "EncodeUnicode" 플러그인을 다운로드 받아 EmEditor에 설치한다. (당연한 얘기지만, EmEditor가 없다면 먼저 EmEditor를 설치해야 한다.)
(2) "EncodeUnicode" 플러그인의 속성을 설정한다.
메뉴에서 마우스로 "Tools/Plug-ins/Customize Plug-ins/EncodeUnicode/Properties" 를 따라가면 설정 창이 나온다. 다음과 같이 설정한다.
▶ "Encode Unicode Properties"에서 "HTML/XML Character Reference"를 선택
▶ "Which characters do you want to encode?(어떤 글자들을 변환하고 싶어요?)" 에서 "Characters which cannot be converted to the current code page(현재 인코딩으로 표현할 수 없는 글자들만 변환)"를 선택
(3) EmEditor에서 빈 문서를 하나 만든 후, 한국어 인코딩 "ksc_c_5601-1987" 로 우선 저장한다. ("ksc_c_5601-1987" 은 "euc-kr" 과 사실상 같은 인코딩인데, 한국어 인코딩은 "euc-kr" 로 부르는 것이 좋다.)
(4) 중국식 한자가 섞인 한국어 문서 원본 전체를 복사한 후, EmEditor의 빈 문서에 붙여 넣는다.
(5) Ctrl+A 로, EmEditor의 문서를 모두 선택한다. EncodeUnicode 플러그인을 클릭한다. 이러면, 한글과 한국식 한자들은 그대로 있고, 중국식 한자들만 모두 "圳" 등의 형식으로 바뀐다. 그런 후 이 결과물을 사용해 HTML 문서를 작성한다. (끝)
----------------------------------
만약 이 과정을 거꾸로 해야 한다면? 가령, HTML의 "圳" 를 "圳"자로 바꾸어 주려면 "Decode Unicode" 플러그인을 사용하면 된다. (단, 이때 HTML의 인코딩은 반드시 UTF-8이어야만 한다.)
지금까지 설명한 이러한 방법은, 중국어뿐만이 아니라 일본식 한자나 아랍어라든지, 한글 인코딩으로 표현 불가능한 모든 문자들에도 똑같이 적용된다.
다만 그 페이지를 볼 사람의 컴퓨터에 해당 언어의 폰트와 인코딩이 설치되어 있어야 한다. 윈도XP이상의 OS에서는 일본어 중국어 등이 이미 설치되어 있지만 오래된 운영체제에서는 사용자가 직접 설치해야 한다.
MS오피스(오피스 2003의 경우)를 설치할 때, "응용 프로그램의 고급 사용자 지정을 선택하십시오"를 체크한 후, "Office 공유 기능/다국어 기능 지원/범용 글꼴" 옵션을 선택하면, 필요한 모든 인코딩과, "Arial Unicode MS (ARIALUNI.TTF)"라는 22MB짜리 폰트를 하나 설치해 준다. 이것으로 전세계의 거의 모든 문자를 표현할 수 있다. 다만 폰트의 품질이 좋지 않아서 가독성이 많이 떨어지는 것이 흠이다.
한국어 페이지에 다량의 중국어/일본어/유럽어 등등이 섞여 있고, 그런 페이지가 아주 많다면, 웹페이지 인코딩 자체를 유니코드(UTF-8)로 바꾸어 주는 것이 보다 합리적이다.
※ 2006-02-11 추가:
"EmEditor Free" 버전은 플러그인 사용이 안되기에, 위의 팁이 적용되지 않음. "EmEditor Professional" 버전을 추천.
한국어(euc-kr) 텍스트 인코딩에서는 한국식 한자들만 표현할 수 있다. 물론 유니코드로는 전세계 모든 문자를 하나의 인코딩으로 표현할 수 있어 편리하지만, 한글 웹페이지를 유니코드(UTF-8)로 굳이 작성할 필요는 없다. 유니코드(UTF-8)는 다소 사치스러운 인코딩이다. euc-kr에는 한글 1개를 2바이트로 표현하지만, UTF-8에서는 3바이트로 표현하기에 파일의 용량이 커져서 서버에 부담을 줄 수도 있다. (다만 영문, 숫자, 기호, 공백 등은 여전히 1바이트)
그런데, 다행히 HTML 문법에서는 텍스트의 일부만을 유니코드로 표현하는 방법을 제공한다. 즉, 웹페이지의 인코딩은 euc-kr로 놔두고, euc-kr로 표현할 수 없는 일부 문자들만 유니코드로 기술하는 것이다. (※ 참고로, 지금 이 블로그는 인코딩이 UTF-8이기에, 이런 방법을 쓰지 않아도 중국식 한자를 쓸 수 있다.)
가령 중국 도시 이름인 선전(深圳)를, 선전(深<土+川>) 으로 흔히 표기하는데, 페이지의 인코딩을 바꾸지 않고도 정확히 표현할 수 있는 방법이 있다.
深圳의 두 번째 글자 "논두렁 수"자는 euc-kr에는 없다. 한국식 한자가 아니거나 또는 희귀 한자여서 그럴 것이다. (두 번째 글자 "논두렁 수"자, 즉, "土(흙 토)변에 川(내 천)의 한자"가 현재 보이지 않는 분은, 컴퓨터에 중국어 폰트가 없기 때문이다. 윈도XP에는 기본적으로 설치되어 있다.)
"논두렁 수"자인, "圳"자의 유니코드 코드값은 "U+5733".
16진수인 "5733"을, 윈도 계산기의 공학용 버전을 사용해, 십진수로 바꾸어 보면 "22323".
결국 다음과 같이 기술하면 "논두렁 수"자가 한글 웹페이지에 표현된다.
深圳
그러나 다른 많은 임의의 한자들의 코드를 이렇게 직접 적어 주는 것은 힘들다. 이때 EmEditor를 사용하면 간단해진다.
아래는 EmEditor를 사용하여 간단히 변환하는 방법이다:
(0) 중국식 한자가 섞인 한국어 문서를 유니코드 인코딩으로 작성한다. (MS워드로 작성하거나, 텍스트 에디터에서라면 우선 빈 문서를 만든 후 유니코드로 변환해 준다. 울트라에디터에서는 다국어 동시 표현이 힘들고 아무래도 EmEditor가 좋다. 아래아한글도 '한글97'보다 높은 버전에서는 유니코드를 사용할 것이다.)
(1) "EncodeUnicode" 플러그인을 다운로드 받아 EmEditor에 설치한다. (당연한 얘기지만, EmEditor가 없다면 먼저 EmEditor를 설치해야 한다.)
(2) "EncodeUnicode" 플러그인의 속성을 설정한다.
메뉴에서 마우스로 "Tools/Plug-ins/Customize Plug-ins/EncodeUnicode/Properties" 를 따라가면 설정 창이 나온다. 다음과 같이 설정한다.
▶ "Encode Unicode Properties"에서 "HTML/XML Character Reference"를 선택
▶ "Which characters do you want to encode?(어떤 글자들을 변환하고 싶어요?)" 에서 "Characters which cannot be converted to the current code page(현재 인코딩으로 표현할 수 없는 글자들만 변환)"를 선택
(3) EmEditor에서 빈 문서를 하나 만든 후, 한국어 인코딩 "ksc_c_5601-1987" 로 우선 저장한다. ("ksc_c_5601-1987" 은 "euc-kr" 과 사실상 같은 인코딩인데, 한국어 인코딩은 "euc-kr" 로 부르는 것이 좋다.)
(4) 중국식 한자가 섞인 한국어 문서 원본 전체를 복사한 후, EmEditor의 빈 문서에 붙여 넣는다.
(5) Ctrl+A 로, EmEditor의 문서를 모두 선택한다. EncodeUnicode 플러그인을 클릭한다. 이러면, 한글과 한국식 한자들은 그대로 있고, 중국식 한자들만 모두 "圳" 등의 형식으로 바뀐다. 그런 후 이 결과물을 사용해 HTML 문서를 작성한다. (끝)
----------------------------------
만약 이 과정을 거꾸로 해야 한다면? 가령, HTML의 "圳" 를 "圳"자로 바꾸어 주려면 "Decode Unicode" 플러그인을 사용하면 된다. (단, 이때 HTML의 인코딩은 반드시 UTF-8이어야만 한다.)
지금까지 설명한 이러한 방법은, 중국어뿐만이 아니라 일본식 한자나 아랍어라든지, 한글 인코딩으로 표현 불가능한 모든 문자들에도 똑같이 적용된다.
다만 그 페이지를 볼 사람의 컴퓨터에 해당 언어의 폰트와 인코딩이 설치되어 있어야 한다. 윈도XP이상의 OS에서는 일본어 중국어 등이 이미 설치되어 있지만 오래된 운영체제에서는 사용자가 직접 설치해야 한다.
MS오피스(오피스 2003의 경우)를 설치할 때, "응용 프로그램의 고급 사용자 지정을 선택하십시오"를 체크한 후, "Office 공유 기능/다국어 기능 지원/범용 글꼴" 옵션을 선택하면, 필요한 모든 인코딩과, "Arial Unicode MS (ARIALUNI.TTF)"라는 22MB짜리 폰트를 하나 설치해 준다. 이것으로 전세계의 거의 모든 문자를 표현할 수 있다. 다만 폰트의 품질이 좋지 않아서 가독성이 많이 떨어지는 것이 흠이다.
한국어 페이지에 다량의 중국어/일본어/유럽어 등등이 섞여 있고, 그런 페이지가 아주 많다면, 웹페이지 인코딩 자체를 유니코드(UTF-8)로 바꾸어 주는 것이 보다 합리적이다.
※ 2006-02-11 추가:
"EmEditor Free" 버전은 플러그인 사용이 안되기에, 위의 팁이 적용되지 않음. "EmEditor Professional" 버전을 추천.
tag: html
HTML | CSS | 자바스크립트 JavaScript
tag: editor
텍스트 에디터 | 문서 편집기 | Text Editor
html 문서에는 수많은 ASCII 영역 글자들이 있습니다. 따라서, UTF-8에서 한글 한 음절을 나타내기 위해 EUC-KR에 비해 1.5배가 든다고 해도, html 파일의 경우 크기의 비율은 결코 1.5가 아닙니다. 기껏해야 1.2배 정도 밖에 안 됩니다. 더구나, EUC-KR은 오직 2350개의 한글 음절만을 2바이트로 표현할 수 있고, 나머지 8,821 (현대 한국어 맞춤법이 허용하는) 음절은 8바이트로 표현해야 합니다. (EUC-KR이라고 선언하고, 실제로는 Windows-949를 쓰는 표준 위반을 저지르지 않는 한). 현대 한국어이든 중세 한국어이든 가장 잘 표현할 수 있는 문자 집합은 유니코드이고, 인코딩은 UTF-8입니다.
만일, 한글 음절이 3바이트인 게 그렇게 걸리면 UTF-16을 쓰는 수도 있습니다. 그렇다고 해도, 파일 사이즈에는 큰 차이가 없습니다. UTF-16의 경우 ASCII 영역 글자를 나타내는데 2바이트가 쓰이니까요.
또, NCR을 쓸 때 굳이 10진수로 변환할 이유는 없습니다.그냥, 16진수를 쓰는 게 훨씬 더 낫습니다. 단, # 다음에 'x'를 써서 16진수임을 나타내야 합니다.
좋은 정보 감사합니다.
유니코드가 많이 쓰이지 않던 오래 전에 쓴 글이라서, euc-kr 우선으로 포스트가 작성되었습니다. 지금은 환경이 좋아져서, 말씀하신 대로 euc-kr보다 유니코드가 여러모로 더 적합합니다.
TXT파일에서는 약1.5배가 되는데 HTML에서는 태그 비율에 따라서 1.2배 정도될 것입니다. 요즘은 서버가 강력해졌기 때문에 HTML 파일 크기 문제도 전혀 없습니다.
제가 예전에 엄청 허접한 서버에서 홈페이지를 운영한 적이 있는데 그때는 정말 1바이트도 아깝더군요ㅠㅠ
<< Home