计算短信 Length/Parts C#

Calculate SMS Length/Parts C#

有人要求我在他的应用程序中帮助一位朋友,该应用程序有一个 indicator/counter 应该向最终用户显示在文本框中写入了多少字符以及 有多少部分写成text/SMS?.

最简单的部分是使用 TextBox1.Text.Length 获取当前字符 count/length,但另一部分负责获取此 SMS 文本中的多少部分,具体取决于 Arabic/UnicodeEnglish/7Bit 种语言,每种语言在 GSM 端都有不同的规范,因为一条阿拉伯语消息最多 70 个字符连接部分为67,对于英语,单个部分为160,连接部分为153。

我们有两个选择,第一个是我们从移动运营商处获取带有编码参数的 SMS,如果它是 7Bit[=21,这有助于我们确定消息的语言=] 或 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.Ceilingreturns大于或等于指定数的最小整数。

P.S. 我们有一个应用程序正在检测给定的文本,如果它是 7 位或 Unicode 编码,但它是一个长代码并且将 post 稍后在适当的标题下。