public const int gsmMaxLength = 160;
public const int unicodeMaxLength = 70;
public static void Main()
string[] messages = new string[]
"ã111111111£222222222£333333333£444444444£555555555£666666666£777777777"
foreach(var msg in messages)
Console.WriteLine("{0} validated as: {1}", msg, Validate(msg));
private static bool Validate(string message)
var textLength = message.Length;
var utf8bytes = Encoding.UTF8.GetBytes(message);
Encoding gsmEnc = new Mediaburst.Text.GSMEncoding();
Encoding utf8Enc = new System.Text.UTF8Encoding();
byte[] gsmBytes = gsmEnc.GetBytes(message);
Console.WriteLine("message: {0}, textLength: {1}, utf8bytes.Length: {2}, gsmBytes.Length: {3}", message, textLength, utf8bytes.Length, gsmBytes.Length);
foreach(var b in gsmBytes)
Console.Write(String.Format("{0,10:X}", b));
byte[] utf8Bytes = Encoding.Convert(gsmEnc, utf8Enc, gsmBytes);
string backToString = utf8Enc.GetString(utf8Bytes);
Console.WriteLine("GSM-7 converted back to normal string: {0}", backToString);
if (textLength > gsmMaxLength)
Feedback("Characters limit exceeded. Please rewrite message.");
if (utf8bytes.Length <= gsmBytes.Length)
Console.WriteLine("Unicode detected.");
if (unicodeMaxLength >= utf8bytes.Length)
Feedback("Unicode message limit is 70 characters. Please rewrite message.");
private static void Feedback(string msg)