Рассчитать длину SMS / части C#
Меня попросили помочь другу в его приложении, у которого есть индикатор / счетчик, который должен показывать конечному пользователю, сколько символов было написано в текстовом поле, а также сколько частей в этом письменном тексте / SMS?
Самая простая часть была о получении текущего количества символов / длины с помощью TextBox1.Text.Length
, но другая часть, которая была ответственна за получение того, сколько частей в этом тексте SMS зависит от арабского /Unicode и английского /7-битных языков, и каждый язык имеет различные спецификации на стороне GSM, так как одно арабское сообщение максимум 70 символов и 67 для сцепленных частей, и для английского языка, это 160 для одной отдельной части и 153 для сцепленных частей.
1 ответ
У нас было два варианта, во-первых, мы получали SMS от оператора мобильной связи с параметром кодирования, который помог нам определить язык сообщения, если это было сообщение 7Bit или Unicode, поэтому было легко проверить заданную кодировку. значение параметра и продолжить проверку 160 или 70, а другой вариант был иметь нашу собственную проверку языка. В любом случае, мы использовали приведенный ниже код, и он отлично работает:
public int CalculateSmsLength(string text)
{
if (IsEnglishText(text))
{
return text.Length <= 160 ? 1 : Convert.ToInt32(Math.Ceiling(Convert.ToDouble(text.Length) / 153));
}
return text.Length <= 70 ? 1 : Convert.ToInt32(Math.Ceiling(Convert.ToDouble(text.Length) / 67));
}
public bool IsEnglishText(string text)
{
return Regex.IsMatch(text, @"^[\u0000-\u007F]+$");
}
Math.Ceiling возвращает наименьшее целое число, большее или равное указанному числу.
PS У нас было приложение, которое обнаруживало данный текст, если оно было в кодировке 7Bit или Unicode, но это длинный код, и мы опубликуем его позже под соответствующим заголовком.