- 3강 : Windows에서의 유니코드(UNICODE)
- 아스키코드 vs 유니코드
- section 1 : Windows에서 유니코드란 무엇인가.
- 문자셋의 종류와 특성
- // 문자셋 ( 문자 집합 )
- SBCS( Single Byte Character Set )
- 문자를 표현하는데 1바이트 사용
- 아스키 코드
- MBCS (MultiByte Character Set )
- 한글은 2바이트 영문은 1바이트 사용
- MBCS 에서 멀티의 뜻은 문자하나를 표현하는데 언어에따라 바이트의 사이즈가 여러 개(멀티)라는뜻
- WBCS ( Wide Byte Character Set )
- 문자를 표현하는데 2바이트 사용 //모든문자는 2바이트
- 유니코드
- 예제 2-1
- int main(void)
{
char str[] = "ABC한글";
int size = sizeof(str);
int len = strlen(str);
printf("배열의 크기 : %d \n", size);
printf("문자열 길이: %d \n",len);
return 0;
}
- 실행결과
- 배열의 크기 : 8
- 문자열 길이 : 7
- 예제 2-2
- int main(void)
{
char str[] = "한글입니다";
int i;
for (i = 0; i <5; i++)
fputc(str[i], stdout);
fputs("\n", stdout);
for( i =0; i<10; i++)
fputc(str[i], stdout);
fputs("\n", stdout);
return 0;
}
- 실행결과
한글
한글입니다
- WBCS 기반의 프로그래밍 // ==유니코드기반의 프로그래밍
- WBCS를 위한 두가지
- 첫째 : char를 대신하는 wchar_t
- 둘째 : "ABC"를 대신하는 L"ABC"
- // "ABC"로표현하는것은 아스키코드로 표현하겠다는 암묵적표시다.
- //유니코드기반은 L:을 붙여서 L"ABC"로해야함
- WBCS 기반 문자열 선언 예
- wchar_t str[] = L"ABC";
- 예전 : char str[] = "ABC";
- 예제 2-3] MBCS1.cpp의 유니코드 버전
- int main(void)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = strlen(str); // <== strlen은 char*를 인자로받아서 컴파일 오류
// wcslen(const wchar_t* string) 으로 바꿔야함
printf("배열의 크기 : % d \n", size );
printf(" 문자열의 길이 : %d \n", len );
return 0;
}
- 문자열 조작 함수
- 표에서 SBCS 함수로 적혀있는데 보통 MBCS함수라고 많이 하는데 틀린말은 아니지만
왜 굳이 SBCS 함수로 했냐면 일부 MBCS 언어나 한글같은 경우는 strlen으로 정확한 계산결과가 안나오기에 위 표에서는 SBCS함수가 더 정확한 표현이다.
- 예제 2-4 ] WBCS1.cpp 유니코드 버전
- int main(void)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wcslen(str);
printf("배열의 크기 : %d \n" , size);
printf("문자열 길이: %d \n" , len);
return 0;
}
- 실행결과
배열의 크기: 8
문자열 길이: 3
- printf가 마음에 걸리는가? ( 이건 나중에 이야기하자 )
- 이것보다 중요한건 printf("배열의 크기 <<<- 부분에 L이 안붙은것
- printf(L"배열의 크기 : %d \n", size)로 수정해야한다.
- 2-2] 문자열 입출력 함수
- 예제 2-5 ] WBCS2.cpp 유니코드 버전
- int main(void)
{
wchar_t str[] = L"ABC";
int size = sizeof(str);
int len = wcslen(str);
wprintf(L"Array Size : %d \n", size);
wprintf(L"String Length: %d \n", len);
return 0;
}
- 실행결과
- Array Size : 8
- String Length : 3
- 매개변수 전달인자 유니코드화
- int main( int argc, char* argv[] ) --> int wmain( int argc, wchar_t* argv[] )
- 프로그램으로 전달되는 매개변수까지 유니코드 기반으로 하기위해서는 main함수를 wmain함수로 수정해주면된다.
'기타 공부 기록 > 뇌를자극하는윈도우즈시스템프로그래밍' 카테고리의 다른 글
5강 WIN32 vs WIN64 (0) | 2022.04.10 |
---|---|
4강 : MBCS와 WBCS의 동시지원 (0) | 2022.04.08 |
2 강. 프로그램의 실행과정/하드웨어 구성의 재접근 (0) | 2022.03.07 |
- 1강 . 컴퓨터 구조에 대한 첫 번째 이야기 (0) | 2022.03.07 |
뇌를 자극하는 윈도우 시스템프로그래밍 (0) | 2022.01.26 |