본문 바로가기

System Programming

Windows에서의 ASCII 및 유니코드(UNICODE)

1. 문자셋(Charcter Sets)의 종류와 특성 

<ASCII 와 UNICODE>

1-1). ASCII 

- 알파벳 26개와 몇몇 확장 문자를 포함하고, 1Bytes로 표현된다.

ASCII 문자표

1-2). UNICODE

- 문자를 표현하는 데 있어 균일하게 2Bytes를 사용하며, 65,536개의 문자를 표현할 수 있다. 

https://ko.wikipedia.org/wiki/%EC%9C%A0%EB%8B%88%EC%BD%94%EB%93%9C_D000~DFFF

 

유니코드 D000~DFFF - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 둘러보기로 가기 검색하러 가기 이 문서 안에는 일부 컴퓨터·브라우저에서 표시할 수 없는 문자가 있습니다. 그러므로 유니코드 글꼴이 있는 환경에서 보시는 것이 좋습니다. 다음은 U+D000에서 U+DFFF 안의 유니코드 문자 목록이다. ‘(Y)YYY0’번째 줄 ‘X’번째 칸에 있는 문자의 코드는 ‘U+(Y)YYYX’이고, HTML 실제 참조 코드는 ‘&#x(Y)YYYX;’이다. 이는 환경에 따라 표시가 다를 수 있다. U+

ko.wikipedia.org

2. 문자열 표현 방식 

<SBSC / MBCS / WBCS>

2-1). SBSC(Single Byte Charcter Set)

- 문자를 표현하는 데 있어서 1Bytes만을 사용하는 방식이다. 

- 대표적으로 ASCII 코드가 SBSC에 해당한다. 

 

2-2). MBSC(Multi Byte Charcter Set)

- 동일한 바이트 수를 적용하는게 아닌, 다양한 바이트 수를 사용해서 문자를 표현하는 방식이다. 

- 영어는 1Bytes로 한글은 2Bytes로 처리한다.

- UNICODE는 MBSC에 속하지 않는다. MBSC는 SBSC를 포함하기 때문이다. 

 

2-3). WBCS(Wide Byte Charcter Set)

- UNICODE가 WBCS 방식에 해당한다. 

- 모든 문자를 2Bytes로 처리하는 문자셋이다. 

 

3. MBCS 기반의 문자열 실습 

<예제 코드> 

3-1). 예제 1_MBCS의 문제점 

MBCS 실습
결과

- 배열의 크기는 8Bytes임을 알 수 있다. 

- MBCS 기반으로 영문은 1Bytes, 한글은 2Bytes로 처리되고 있음을 알 수 있다.

ABC(3Bytes) + 한글(4Bytes) + NULL 문자(1Bytes) = 8Bytes

- 문자열의 길이는 7Bytes로 출력된다. 이는, strlen은 문자열의 길이를 계산함에 있어서 NULL 문자를 포함하는 않기 때문이다. 

"ABC한글"의 실제 길이는 5이지만, "한글"이라는 단어는 길이가 4로 인식되고 있다. 이것이 바로 MBCS의 문제점이다. 

 

3-2). 예제 2_MBCS의 문제점

 

MBCS 실습
결과

- "한글입니다" 문자열의 길이는 5이다. 그러나 for 루프 내에 선언되어 있는 fputc 함수를 10번 호출해야만 정상적인 출력이 가능하다. 

- 문자열 길이는 5이지만, 문자열에 할당된 크기가 10Bytes인 관계로 1Bytes 데이터를 출력하는 fputc 함수를 10번 호출해야 한다.