본문 바로가기

IT/ETC

[ETC] 아스키코드(ASCII), 유니코드(UNICODE), 유니코드의 인코딩(UTF-8, EUC-KR, MS9) 등

아스키코드(ASCII)
아스키(ASCIIAmerican Standard Code for Information Interchange, 미국 정보 교환 표준 부호)
영문 알파벳을 사용하는 대표적인 문자 인코딩, 컴퓨터와 통신장비를 비롯한 문자를 사용하는 많은 장치에서 사용
1967년에 표준으로 제정되어 1986년에 마지막 개정이 되었음.
1Byte로 표현되고, 비트로는 10진수 0~255 로 표시할 수 있다.




유니코드 (UNICODE)
전 세계의 모든 문자를 컴퓨터에 일관되게 표현하고 다룰 수 있도록 설계된 산업 표준
유니코드 협회가 제정하며, 최신판은 2009년 10월에 공개된 유니코드 5.2 이다. 
유니코드의 목적은 현존하는 문자 인코딩 방법들을 모두 유니코드로 교체하려는 것이다.
기존의 인코딩들은 규모나 범위면에 한정되어 있고, 다국어 환경에서는 서로 호환되지 않는 문제점이 있었다.
유니코드가 다양한 문자 집합들을 통합하는 데 성공하면서 널리 사용되게 되었다.
이해하기 편하게 말해서 세계 모든 문자를 0번 부터 쭈욱 ~ 번호를 정해서 만든 집합체 라고 보시면 됩니다.
0000~ 부터 시작 Basic Latin, 한글은 AC00 부터 시작 합니다. 참고 (http://rudhar.com/lingtics/uniclnkl.htm)
pdf파일로 다운 받으실 수 있습니다.
(각 나라별로 인코딩하여 사용하다보니 한글이 깨지고 난리 지금도 계속 버전이 업그레이드 되고 있다. 각 나라별로 유니코드 인코딩을 왜 하느냐는 아마도 차지하는 용량을 줄이기 위해서 인 듯. ISO-8859는 서유럽, EUC-KR은 한국 등)




UTF-8
유니코드를 위한 가변 길이 문자 인코딩 방식 중 하나로, 켄 톰프슨 과 롭 파이크가 만들었습니다.
이 인코딩은 유니코드 한 문자를 나타내기 위해 1Byte~4Byte까지를 사용 합니다.
아스키영역은 1Byte(영문포함), 한글의 경우는 3Byte를 차지 합니다.
그 외 UTF-16, UTF-32 등 많이 있지만 생략
(개발생활하면서 제일 많이 접하는 문자 인코딩 방식. 거의 다 호환)


EUC-KR
EUC-KR 완성형 코드로서 KSC5636 과 KSC5601로 합쳐진 인코딩 방식 입니다.
KSC5636은 옛 이름이고, 현재는 KS X 1003으로 불립니다. 한국 산업 규격으로 지정된 로마자 문자 집합(영문 등)으로,
1998년에 제정되었으며 현재는 2003년에 개정된 KS X 1003:2003 입니다. 
로마자 문자 집합이 전부 이므로 아스키와 거의 동일하며 역슬래시와 원화기호(\)가 들어 있는 것만 다르다.
KSC5601은 옛 이름이고, 현재는 KS X 1001으로 불립니다. 한국 산업 규격으로 지정된 한국어 문자집합으로,
1974년에 처음으로 제정되었고, 2004년에 개정된 KS X 1001:2004 입니다. 


CP949 (MS949)
마이크로소프트사가 도입한 코드페이지로, 본래는 KSC 5601의 완성형 한글을 표현한 코드 페이지 였으나, 윈도우95부터
확장 완성형이라는 명칭으로 확장되어 현대의 모든 한글을 수용하게 되었습니다. CP949 인코딩은 EUC-KR의 확장.
(즉 EUC-KR 보다 한글 글자를 더 많이 표현할 수 있다는 이야기)


ISO/IEC 8859 (ISO-8859-1)
ISO와 IEC의 공동 표준으로 ISO/IEC 8859-1, -2, -3..n 등의 세부 표준이 제안 되어 있습니다.
주로 ISO-8859-1을 사용하고 있으며, 대부분의 서유럽 언어를 지원 합니다. (네덜란드, 노르웨이. 덴마크, 영어, 프랑스, 이탈리아, 몇개의 아프리카어) 또 ISO-8859-1은 Latin-1 이기도 하다.
중요한 건 HTML 문서의 기본 인코딩이라는 사실.




잡담
HTML 문서의 기본 캐릭터셋은 ISO-8859-1 (대부분의 서유럽국가 캐릭터셋)  이다.
왜 UTF-8 이 아니라 ISO인가? 
이 컴퓨터만 알아듣는 0 1 0 1 을 이렇게 인코딩을 하여 수 많은 인코딩 방식이 생기게 한 이유는 
정보의 형태나 형식을 표준화, 보안, 처리속도향상, 저장공간 절약 등을 위해서이다.


출처 : 
http://cafe.naver.com/buldon.cafe 



1. 문자인코딩 
 코드체계 
 KSC 5601과 Euc-kr은 같은 코드체계를 사용한다. 
 ASCII코드는 여덟 비트 중 일곱 비트만을 사용하고 그 이외의 코드들은  
 8(7bit) + 8(7bit) = 16(14bit)를 사용한다. 
 인터넷의 국제화가 추진되면서 US-ASCII 이외의 다른 나라 문자로 이루어진  
 텍스트문자열에 대한 전송 필요성도 생겼는데, 영어 이외의 문자는 8번째 최상위  
 비트 (MSB)를 사용하여 표현되며, 따라서 8비트의 전송이 필요한 것이다.  
 이에 따라 8비트를 7비트 영문 ASCII 코드로 표현하는 방법(인코딩)과 이를  
 다시 8비트로 바꾸는 방법 (디코딩)이 고안되었슴. 
 추상적인 글자셋을 구체적인 bit-stream으로 표기할 방법을 찾아야 하며,  
 그런 방법으로는 EUC-KR, ISO-2022-KR, ISO-8859-1 등이 있다. 
 EUC-KR : Bell Laboratories에서 확장 유닉스 코드 (Extended UNIX Code)라 하여,  
               유닉스 상에서 영문자 이외의 문자들을 지원하는 방법으로 제안되었슴. 
 ISO-8859-1은 두 가지 의미로 쓰임. (추상적인) 문자세트를 뜻하기도 하고,  
               문자인코딩을 뜻하기도 한다.  미국 및 서유럽 일부에서는 ISO-8859-1  
               인코딩이 폭넓게 사용되고 있으며, 우리나라에서는 EUC-KR 인코딩이  
               현재 폭넓게 사용되고 있다.  
 ISO-2022-KR : 한글 메일 전송을 위해 별도로 고안된 7비트 인코딩 방식  


2. 문자세트 
 일정 목적으로 사용되기 위한 문자들의 모임 
 KSC-5601 : 한글에 대한 국가표준코드 : 1987년 한국공업진흥청에서 제정 94*94  
                  행렬에 한글, 한자 그리고 특수문자를 배치한 추상적인 글자순서 
                  KSC-5636은 US-ASCII의 역슬래쉬가 \로 표현한 것이다. 
 ISO-8859-1 : 서유럽 언어의 표기에 필요한 US-ASCII에 없는 94개의 글자의 순차적 
                   나열임  
 EUC-KR  : KSC-5601과 KSC-5636(US-ASCII의 한글버전)의 8비트 문자집합 AT&T 
                 의 Extended Unix Charset으로 한글 표현에 이용 
 ISO-2022-KR : Korean Mail Exchange Standard, 한글메일을 전송하기 위한  
                      인코딩 방식 
  

3, 서블릿에서의 한글 처리 
  URL 정보의 한글처리 
      웹 브라우저에서 x-www-form-urlencoded 인코딩을 사용하여 한글을  
      전송하게      되면 서블릿에는 잘못된 한글이 전달된다. 
  서블릿 프로그램에서는 한글 처리를 해주어야지 한글을 볼 수 있슴.  
   한글이 깨지는 이유는 브라우져와 서블릿 프로그램이 서로다른 한글 캐릭터  
   세트를 사용하기 때문에 발생, Browser는 브라우져는 8859_1의 캐릭터 세트를  
   사용하는데 반해 서블릿에서는  KSC5601을 사용하기 때문이다. 

  컴파일시 encoding옵션을 8859_1 
      (javac –encoding 8859_1 HelloWorld.java) 
  PrintWriter 클래스 이용 
     OutputStreamWriter 클래스는 생성자에서 문자열의 encoding타입을 정의  
     PrintWriter out = new PrintWriter(new OutputStreamWriter  
                                   (res.getOutputStream(),”KSC5601”),true); 
 문자인코딩을 지정하여 웹브라우져에 한글 출력  
    setContentType()메소드를 사용 
     res.setContentType(“text/html ; charset=euc-kr”) 
     getParameter 등으로 값을 받을때는 한글변환을 해야한다.