본문 바로가기
프로그래밍/폰트_문자열_인코딩

헷갈리는 한글판단 in utf-8, unicode, euc-kr

by 써드아이 2014. 1. 21.

문자열인 한글인지를 판단하기 위해서 wide character(wchar_t형, wcs)는  

multibyte character (char형, mbs)로 변환을 해주어야 한다. (wcs는 한글/영문 판별이 안됨)


=> 프로그램을 wchar_t 로 작성했을 경우 wcstombs() 등의 함수를 사용하여 변환하는 과정이

   포함되어야 한다는 뜻이다.



또, 시스템이 utf-8 인코딩인 경우(소스코드가 utf-8로 인코딩되어 저장됨) 한글은 2 바이트가 아닌 

3바이트로 저장되기에 한글 판단을 위해서는 이를 2바이트 유니코드로 변경해야한다.


=> 시스템의 인코딩을 인지하여 3 바이트 한글을 2바이트 한글로 변환하는 과정이 필요하다.





한글 판단 


if ( 0x80 & 문자 ) // 이면 일단 영문의 범위를 넘어간다


그중에 한글인지 판단은


유니코드일 때


첫번째 바이트 0xAC ~ 0xD7

두번째 바이트 0x00 ~ 0xFF


완성형(euc-kr) 일 때


첫번째 바이트 0xB0 ~ 0xC8

두번째 바이트 0xA1 ~ 0xFE


조합형


첫번째 바이트 0x84 ~ 0xD3

두번째 바이트 0x41 ~ 0x7E, 0x81~ 0xFE




%%

euc-kr이 ksc5601이 아니라 ksc5861이라는 글을 얼핏 봤는데

정확하게는 잘 모르겠다.




if ( utf-8 인코딩 )

{

    decoding to normal unicode

    

    if ( 문자 & 0x80 )

    {

        if ( 유니코드의 한글 범위 내에 있으면 )

            한글이다.

    }

}

else

if ( 문자 & 0x80 )

{

    if ( euc-kr )

    {

    }

    else 

    if ( 조합형 )

    {

    }

}