인코딩 탕입이란 특정 캐릭터셋으로 만들어진 파일을 보여주는 방식이다.
전세계 주요 언어문자를 하나의 바이너리 코드로 처리하기 위해서 유니코드로 만들었지만
이 코드를 보여주는 인코딩 방식은 다양하다.
텍스트 파일이 어떤 인코딩 타입으로 설정되어 있느냐에 따라 똑같은 유니코드 데이터도 제대로
보이기도 안보이기도 한다. 그래서 어떤 인코딩타입으로 되어 있는지 알아내야 한다.
텍스트 파일엔 인코딩 방법이 여러가지가 있다
1. 안시
2. Unicode( little Endian )
3. Unicode( big Endian )
4. UTF-8
txt파일 -> 다른이름 저장 -> 하면 인코딩 방식 메뉴 있음.
상대방이 어떤 방식으로 작업을 했는지 통보를 받지 못하는 경우도 생긴다.
파일을 읽기전에 인코딩 방식을 알아본뒤 작업하자.
인코딩 방식을 알아보려면 파일을 3바이트만 읽어오면 된다.
3바이트 읽는 이유는 각각 방식들이 나타내는 비트가 있는데 UTF-8은 바이트가 필요하기 때문이다.
나머진 2바이트면 됨.(비트들은 16진수로 되어있다)
#include <stdion.h>
#include <string.h>
#include <ctype.h>
#include <windows.h>
int CheckEncoding( BYTE *str )
{
int iRet = 0;
BYTE Unicode_L[] = {0xFF, 0xFE}; // 유니코드 리틀
BYTE Unicode_B[] = {0xFE, 0xFF}; // 유니코드 빅
BYTE UTF_8[] = {0xEF, 0xBB, 0xBF}; // UTF-8
if( memcmp( str, Unicode_L, 2 ) == 0 ) // 메모리비교를 해야한다.
{
iRet = 2;
}
else if( memcmp( str, Unicode_B, 2 ) == 0 )
{
iRet = 3;
]
else if( memcmp( str, UTF_8, 3 ) == 0 )
{
iRet = 4;
}
else
{
iRet = 1;
}
return iRet;
}
void main()
{
BYTE buf[3];
memset( buf, 0, 3 );
FILE *p = fopen("abc.txt", "r");
fread( buf, sizeof(BYTE), 3, p );
fclose( pf );
int Ret = CheckEncoding( buf );
switch( Ret )
{
case 1:
printf("Encoding : ANSI \n");
break;
case 2:
printf("Encoding : Unicode_L \n");
break;
case 3:
printf("Encoding : Unicode_B \n");
break;
case 4:
printf("Encoding : UTF-8 \n");
break;
default:
break;
}
}