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("==============");
}