UNICODE :
http://www.unicode.org/standard/translations/korean.html
유니코드에 대해 ?
어떤 플랫폼,어떤 프로그램,
어떤 언어에도 상관없이
유니코드는 모든 문자에 대해 고유 번호를 제공합니다.
UCS-2 :
대부분의 흔히 쓰는 문자들을 정의한 규격입니다.
2bytes 범위라서 UCS-2 입니다.
이걸 bit 로 표현하여 UTF-16 입니다.
UTF-16LE, UTF-16BE 가 동일한 규격으로 Little Endian, Big Endian 은 단지 byte order (바이트 순서)가 다를뿐 입니다.
iconv --list 를 해보면 쓸데없이 많이 나오는데,
UTF-16LE, UCS-2LE 가 같은거고 BE 끼리 같은거라고 보면 됩니다.
그냥 UTF-16은 UTF-16LE 와 동일하나 앞에 BOM 헤더가 붙습니다.
UCS-2 는 헤더가 붙지 않습니다.
UCS-4 :
UCS-2 의 확장입니다.
뒤의 2bytes 는 UCS-2 와 완전히 호환됩니다.
즉, UCS-2 의 0xFFFF 는 UCS-4 의 0x0000FFFF 와 같은 코드입니다.
UTF-32 로 말만 바꾸어 위의 내용과 동일합니다.
인터넷 브라우저 내부에서 이것이 사용되며,
js 등에서 indexOf() 로 가져오면 UCS-4 코드가 10진수로 반환됩니다.
10진수 이므로 65535 까지는 UCS-2 와 완전 호환 됩니다.
UTF-8 :
UCS-2, UCS-4 는 영어권에서는 분명한 낭비가 있습니다.
ascii 만으로도 충분히 표현 가능한데, 한글자에 쓰지도 않는 바이트가 낭비되지요.
그런점도 있고, 문자열로 뭘 하기에 UTF-7 보다는 편리해서 가장 보편적으로 사용됩니다.
가변길이를 가지는 특징이 있습니다.
단지 계산만으로 UCS-2, UCS-4 규격으로의 상호변환이 가능합니다.
한국어는 UCS-2 규격 내에 있기 때문에 3bytes 내에서 표현 가능합니다.
UTF-7 :
이메일 등 ascii 만으로 표현해야 할 필요성에 의해 만들어졌습니다.
한 글자당 8bit 씩 할당하지만 사용은 7bit 만 합니다.
UTF-8 과 같은 특징을 가지고 있으나,
모든 ascii 값이 실제 ascii 와 같은 의미가 아니기 때문에 이것으로 무엇을 하기는 좀 힘듭니다.
BOM (Byte Order Mark) :
유니코드 종류가 많기 때문에 앞에 이런 헤더를 붙여서 구분하기도 합니다.
EmEditor, UltraEdit, Vim 등의 에디터에서 인식합니다.
코드표
http://www.unicode.org/charts/
각 나라별 코드범위와 정의된 문자를 볼 수 있습니다.
앞에 0 을 적지 않았기 때문에 (Zerofill 이 아니기 때문에) 4자리까지는 UCS-2 려니 하시고,
5 자리 부터는 UCS-4 려니 하십시오.
추가 설명1
1. 유니코드는 2바이트가 아닙니다. -_-;;
영문자 등을 1byte 로 표시하고 기타 알파벳을 쓰지 않는 언어들에서 2byte 문자로 표시했었는데, 2byte 로 표시할 수 있는 영역이 한정적이다 보니 2byte 로 표시하게 되면 예컨데 일본어 영역과 한국어 영역이 겹치게 됩니다. 따라서, 한국어와 일본어를 동시에 표현할 수가 없게되는거죠. 그래서 영역을 늘리거나 해서 하나의 인코딩에 다양한 문자를 다 담을 수 있도록 하려는 게 바로 유니코드입니다. UTF-8의 한글 한글자가 3byte 인 것이 바로 그 이유죠.
그렇다고 반드시 3byte 냐 하면 그것도 아니고 유니코드 내에도 수많은 인코딩이 존재하기 때문에, 말 그대로 인코딩마다 길이가 다릅니다.
2. 완성형코드라서 글자를 표현못한다는 말은 잘못된 표현입니다. 조합형이건 완성형이건 그건 글자를 인코딩하는 방식의 문제이고, 완성형의 경우 특정글자에 코드를 매칭시키는 형태이기 때문에 매칭테이블에서 빠지면 표현이 안되는 거죠. 반면에 조합형은 초중종성을 조합하는 구조니까 조합가능한 모든 경우의 수를 빠뜨리지 않을 수 있는 거구요. "완성형이라서 표현을 못하는 건" 아니라는 겁니다. 뭐가 더 합리적이고 비합리적인 건 나중문제구요.
아… 완성형과 확장완성형이라는 용어를 구분하기 위해서라면 맞는 말일 수도 있습니다. 나중에 만들어진 CP949를 확장완성형이라고 해서, 그 전에 만들어진 완성형과 구분해서 불렀으니까요.
근데, 어째서 EUC-KR을 유닉스 계열의 코드 페이지라고 하는지 모르겠네요. 완성형 코드페이지가 처음 만들어져서 적용된 것도 MS-DOS 계열이었는데 말이죠. 한글에 있어서는 MS쪽이 유닉스보다 훨씬 발빠르게 움직였는데요?
추가 설명2
컴퓨터를 사용하면서 종종 UTF-8라는 단어를 들어봤을 것입니다.
하지만 검색을 해보면,복잡한 기술적인 용어가 많아서
오히려 무슨 말인지 이해하기 어렵다는 말을 자주 듣습니다.
이 자리에서는 UTF-8(유니코드)에 대해 가장 기본적인 개념에 대해 소개하도록 하겠습니다.
따라서,기술적이고 복잡한 것들은 최대한 제외하기 위해 노력하였습니다.
UTF-8은 전세계 모든 문자를 동시에 표현할 수 있도록 만들어진 규약입니다.
컴퓨터에서 UTF-8이나 EUC-KR이런 것들이 보인다면,
‘아하,한글 표현과 어떤 관련이 있는 것이로군‘
이라고 생각하시면 됩니다.
UTF-8은 흔히 유니코드라고도 불립니다.
(UTF-8은 유니코드를 표현하기 위한 방식 중의 하나입니다.)
애초에 컴퓨터에서 문자를 표기할때 영어권 국가만 생각해서 만들었기 때문에,
전세계 각 나라들은 자기나라의 문자를 표현하기 위해 나름대로의 독자적인 꼼수를 사용해야 했습니다.
이러한 방법을 인코딩이라고 부릅니다.
우리나라는 한글을 표기하기 위해 EUC-KR라는 인코딩을 사용하였고,
일본은 Shift-JIS,중국은 GB2312,대만은 Big5,우크라이나는 KOI8-U..등등
결국 지구상에는 수십종류의 인코딩이 생기게 되었습니다.
하지만,이렇게 제각각의 길을 걷다 보니 문제가 되는 경우가 많았습니다.
흔히 ‘한글이 깨져 보인다‘거나 ‘이상한 글자가 보인다‘는 말은 이 과정에 문제가 생겼기 때문입니다.
외국에서 만든 프로그램이나 게임들은 한국어 환경에서 제대로 문자가 보이지 않는 경우가 많았고,
반대로 한글로 된 것들은 영문윈도우 등에서 제대로 표시되지 않습니다.
이것은 로마자 외의 문자를 가진 다른 나라도 마찬가지였습니다.
그래서 전세계의 수많은 기업들을 중심으로 이러한 문제와 혼란을 한큐에 해결하기 위한 노력이 진행되었습니다.
그리하여 탄생한 것이 유니코드(Unicode)입니다.
전세계 모든 글자들을 한곳에 몰아넣은 종합세트인 것이죠.
그 중에서 UTF-8이라는 방식이 가장 힘을 얻게 되었고,세계 표준으로 인정받고 있습니다.
UTF-8이 도입되면서 전세계 모든 문자를 동시에 표현할 수 있게 되었고,
따라서 서로간에 충돌이 일어나는 일이 없을 뿐만 아니라 다국어입력 또한 수월하게 되었습니다.
또한,UTF-8은 현존하고 있는 모든 문자를 포함할 뿐만 아니라,학술용도를 위해 인류 역사상 존재했던 문자들을 담을 수 있습니다.
한국어의 경우 현재 사용가능한 11172자의 한글 외에도
아래아,반치음 처럼,이제는 사라져 버린 옛날 문자인 한글고어도 표시할 수 있습니다.
윈도우의 경우 이미 윈도우98부터 유니코드를 채택하여 사용하고 있고,
앞으로도 점점 유니코드가 널리 사용될 것입니다.
하지만 여전히 문제가 되는 곳이 웹페이지 입니다.
흔히 한글파일명으로 된 그림이 보이지 않을때 ‘URL을 항상 UTF-8로 보냄‘ 옵션을 해제하라는 설명을 자주 봅니다.
물론 필요할 경우는 어쩔 수 없겠지만,이 방법은 단지 임시방편일 뿐이라는 사실을 알고 있어야 합니다.
아직까지 네이버를 비롯한 대부분의 사이트들은 UTF-8이 아닌 EUC-KR을 사용하고 있기 때문에 생기는 문제인데,
전세계 각 나라들이 서로간의 언어 충돌로부터 자유로워지기 위해서는
궁극적으로 UTF-8로 통일되어야 할 것입니다.
현재는 과도기에 있기 때문에 다소 불편함을 겪는 것입니다.
이상으로,UTF-8의 기본적인 개념에 대하여 설명하였습니다.
좀더 자세한 기술적인 것에 대해 알고 싶으시다면 아래의 페이지를 방문해 보십시오.
http://www.unicode.org (유니코드 공식 홈페이지)
http://kldp.org/Translations/html/UTF8-Unicode-KLDP/UTF8-Unicode- KLDP.html (UTF-8 및 유니코드에 관한 FAQ모음)