728x90
반응형

한글을 2byte로 계산하기위해서 기본적으로 이해를 하셔야 하는 부분은 바로 Unicode 입니다. 

해당 부분에 대한 이해없이 단순히 Encoding을 이용해서 Byte 수를 계산한다면, 

한글자당 2~3 으로 byte수가 변하는 것을 경험하시게 될겁니다. 

 

 

한줄로 요약한다면,

유니코드는 국제표준 문자표이고 UTF-8은 인코딩 방식입니다.

 

Unicode는 전세계 언어를 모두 표시할 수 있는 표준코드 입니다. 

그래서 언어자체의 의미로 byte 수를 계산하려고 한다면 Unicode로 인코딩 해서 계산하여야 합니다. 

그렇지 않다면, 아래와 같은 오류를 범하실 수 있습니다. 

 

 


string str = "헬로우월드다";
byte[] data = Encoding.Default.GetBytes( str )
int count = data.Length;

// count = 18

기본적으로 System.Text.Encoding 클래스의 Default 를 사용하게 되면 UTF8 인코딩을 이용하게 됩니다. 

UTF8 인코딩일 경우 한글 1글자당 3Byte 로 잡히기 때문에 

위에 예시처럼 6글자의 한글일 경우 18byte 로 잡히게 됩니다. 

 

즉, 일반적인 웹사이트에서 한글 1글자당 2byte로 표기 해달라는 요청에 UTF8 인코딩을 이용하게 되면, 

어긋나는 결과가 나오게 됩니다.

이러한 요청에는 Unicode를 이용하여 Encoding 해줘야 합니다. 

 

 

string str = "헬로우월드다";
byte[] data = Encoding.Unicode.GetBytes( str )
int count = data.Length;

// count = 12

동일한 예제를 Unicode로만 변경했을 경우, 우리가 원하는 한글 6글자에 12Byte 길이의 값을 가질 수 있습니다. 

 

 

 

728x90

+ Recent posts