2009년 12월 23일 수요일

[C#] 문자열 총 바이트 계산

출처: devpia.com
http://www.devpia.com/Maeul/Contents/Detail.aspx?BoardID=17&MAEULNo=8&no=67725&ref=67716
유경상 (Loner) 2006-10-26 오전 12:13:08



닷넷에서 문자열은 유니코드를 사용합니다. 한글이던 영문이던 숫자건 특수기호건 모두 2바이트를
차지하지요. 문자열의 길이 곱하기 2 하면 끝이 납니다만...
닷넷의 문자열을 파일에 기록하거나 네트워크로 전송할 때 유니코드를 사용하지 않고
euc-kr 이나 ks_c_5601-1987(Windows에서 사용하는 한글 ANSI 문자셋이지요) 혹은
UTF8 등으로 인코딩하게 되면 그 길이는 각 인코딩 마다 다르게 나타납니다.

euc-kr 및 ks_c_5601-9 인코딩은 한글은 2바이트, 영문/숫자는 1바이트, 기호는 1바이트 혹은
2바이트를 차지하고 UTF8은 상당히 복잡한 구조입니다.
따라서 각 인코딩별로 바이트 수는 달라지며 System.Text.Encoding 클래스를 이용하여 바이트 길이를 알아내야 합니다.


System.Text.Encoding.UTF8.GetByteCount(str) => UTF8 문자셋 사용시 바이트 길이
System.Text.Encoding.GetEncoding("ks_c_5601-1987").GetByteCount(str) => ks_c_5601-1987 문자셋 사용시 바이트 길이
System.Text.Encoding.Default.GetByteCount(str) => 운영체제 기본 문자셋 사용시 바이트 길이
str.Length * 2 => 유니코드(UTF16) 사용시 바이트 길이
System.Text.Encoding.Default를 사용하면 해당 운영체제의 디폴트 문자셋을 사용합니다.

한글 윈도우인 경우 ks_c_5601-1987, 영문 윈도우일 경우 ASCII 와 비스므레한
ISO-8xxx (정확한게 기억이 안나서... -_-)
문자셋을 사용하게 되지요.
도움이 되셨기를....

-----------------------------------------------------------------------
[Development Consultant, Microsoft MVP]
TheOne Technology Inc.
http://www.theonetech.co.kr
The Simpe is The Best !
http://www.simpleisbest.net

댓글 없음:

댓글 쓰기