재우니의 블로그

 

SMS 구현하다보면,

 

한글 및 한/영키로 바꾼 특수문자는 2 byte 로 지정되고,

영문이나 한칸 띄움(space) 그리고 자판기에 존재하는 특수문자(~!@#$% 등...) 는 1 byte 로 계산된다.

 

이를 글자하나하나 체크하기 위해서는 많은 귀차니즘이 발동하지만, 우선 글자 하나하나를 char 로 변환하여 글자를 byte 로 변환하고 나서 1 byte 인지 2 byte 인지 계산해 준다. 위에 언급한 대로 정확하게 자리수를 알려준다.

 

 

string iMsg = "[동해물과] 백두산이 abc 마르고 & 닳도록 하느★님이 보우하사 우리~ 나라萬세 무宮화 [동해물과] 백두산이 abc 마르고 & 닳도록 하느님이 보우하사 우리~ 나라만세 무궁화 [동해물과] 백두산이 abc 마르고 & 닳도록 하느님이 보우하사 우리~ 나라만세 무궁화 !!";

 


int i = 0;
string tmpMsg = "";
int lasti = iMsg.Length;
List msgList = new List();
foreach (char c in iMsg)
{
	tmpMsg += c.ToString();

	if (Encoding.Default.GetBytes(tmpMsg).Length >= 79)
	{
		msgList.Add(tmpMsg);
		tmpMsg = "";
	}

	i += 1;

	if (i == lasti)
	{
		msgList.Add(tmpMsg);
		tmpMsg = "";
	}
}



foreach (string msg in msgList)
{
	Console.WriteLine("==============");
	Console.WriteLine(msg);
	Console.WriteLine(Encoding.Default.GetBytes(msg).Length);
	Console.WriteLine("==============");
}