SW개발

SBCS, MBCS, WBCS

박종명 2023. 10. 31. 08:20
728x90
이 글은 제가 과거에 운영했던 사이트인 http://dotnet.mkexdev.net 의 글을 옮겨온 것입니다. 원본 글은 2009년 10월에 작성되었습니다.

그 전에 운영했었던 사이트(mkex.pe.kr)은 흔적도 없이 사라 졌습니다. 그속의 글들도 모두... 그래서 이 사이트도 사라지기 전에 옮기고 싶은 글을 조금씩 이 블로그로 이동시키려 합니다.
(원본글) http://dotnet.mkexdev.net/Article/Content.aspx?parentCategoryID=2&categoryID=9&ID=525

 

문자 인코딩 체계(방식)에 대한 분류입니다.

SBCS(Single Byte Character Set)

1바이트로 문자를 인코딩합니다. ASCII 인코딩이 대표적인 SBCS 입니다
ASCII 개요와 코드표는 다음의 글을 참고해 주세요.
=> ASCII

MBCS(Multi Byte Character Set)

1바이트로는 최대 256 글자만 표현할 수 있기 때문에 영어권 이외의 나라에서는 그 나라 문자를 인코딩 할 수 없기 때문에 바이트를 하나 더 사용합니다. 즉 최대 2바이트로 인코딩 합니다. 2바이트로 문자를 표현하기 때문에 DBCS(Double Byte Character Set)이라고도 합니다.

다만 MBCS 는 무조건 2바이트가 아니라 영어와 같이 1바이트로 표현 가능한 문자는 여전히 1바이트 사용합니다.
즉 문자에 따라 1byte 혹은 2byte 를 사용합니다(MBCS = SBCS + DBCS라 할 수 있습니다)

대표적으로 euc-kr 이나 한글 윈도우 기본 ANSI 인코딩은 코드페이지 949가 MBCS에 해당합니다
euc-kr 전체 코드표는 다음의 링크를 참조해 주세요
=> euc-kr 전체 코드표


WBCS(Wide Character Set)

MBCS 는 각 나라마다 그 정의가 다릅니다
따라서 전 세계 글자를 하나의 코드표로 정의하는게 필요 했는데, 바로 그렇게 탄생한 것이 유니코드(UniCode) 입니다. 유니코드를 WBCS라 합니다

유니코드에 대한 저의 에피소드는 다음글을 참조해 주세요
=> 이런... 계집 녀


아래 그림은 대표적인 인코딩에 따른 문자 길이와 바이트 수, 그리고 코드페이지를 보여줍니다
(닷넷으로 작성된 프로그램 입니다)



소스참고---------------------------------------------------------------------------
        private void btnDefault_Click(object sender, EventArgs e)
        {
            this.txtDefaultLenght.Text = str.Length.ToString();
            this.txtDefaultByte.Text = Encoding.Default.GetByteCount(str.ToCharArray()).ToString(); 
            //this.txtDefaultByte.Text = Encoding.GetEncoding("ks_c_5601-1987").CodePage.ToString();
            this.txtDefaultCodePage.Text = Encoding.Default.CodePage.ToString();
        }

        private void btnUnicode_Click(object sender, EventArgs e)
        {
            this.txtUnicodeLength.Text = str.Length.ToString();           
            this.txtUnicodeByte.Text = Encoding.Unicode.GetByteCount(str.ToCharArray()).ToString();
            //this.txtUnicodeCodePage.Text = Encoding.GetEncoding("utf-16").CodePage.ToString();
            this.txtUnicodeCodePage.Text = Encoding.Unicode.CodePage.ToString();
        }

        private void btnUTF8_Click(object sender, EventArgs e)
        {
            this.txtUTF8Length.Text = str.Length.ToString();
            this.txtUTF8Byte.Text = Encoding.UTF8.GetByteCount(str.ToCharArray()).ToString();
            //this.txtUTF8CodePage.Text = Encoding.GetEncoding("utf-8").CodePage.ToString();
            this.txtUTF8CodePage.Text = Encoding.UTF8.CodePage.ToString();
        }

        private void btnEucKr_Click(object sender, EventArgs e)
        {
            this.txtEucLength.Text = str.Length.ToString();
            this.txtEucByte.Text = Encoding.GetEncoding("euc-kr").GetByteCount(str.ToCharArray()).ToString();
            this.txtEucCodePage.Text = Encoding.GetEncoding("euc-kr").CodePage.ToString();
        }

----------------------------------------------------------------------------------

참고>

* chcp
현재 운영체제의 기본 ANSI 코드 페이지를 확인하려면 Command 창에서 다음 명령어를 확인하세요
chcp : 현재 활성 코드 페이지 확인
chcp xxx : 코드 페이지 변경


* charmap
그리고 현재 운영체제의 유니코드 문자표를 확인하려면 Command 창에서 charmap 명령어로 확인하세요