이 글은 제가 과거에 운영했던 사이트인 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 명령어로 확인하세요
'SW개발' 카테고리의 다른 글
[C# 기초강좌] 4. 명령줄 빌드 (0) | 2023.11.01 |
---|---|
[C# 기초강좌] 2. 닷넷의 실행구조 (0) | 2023.11.01 |
이런... 계집 녀(女) (0) | 2023.10.31 |
다차원 배열의 인덱싱 (0) | 2023.10.27 |
배열 인덱싱의 메커니즘(arr[i] == *(arr+i)) (0) | 2023.10.27 |