2

我被要求在他的应用程序中帮助一个朋友,该应用程序有一个指示器/计数器,应该向最终用户显示文本框中已经写了多少个字符,以及这个书面文本/SMS 中有多少部分

最简单的部分是使用 获取当前字符数/长度,但另一部分负责根据阿拉伯语/Unicode英语/7BitTextBox1.Text.Length语言获取此 SMS 文本中的多少部分,并且每种语言都有不同的规范在 GSM 方面,一条阿拉伯文消息最多 70 个字符,连接部分为 67 个字符,而对于英语,一个单独部分为 160 个,连接部分为 153 个。

4

1 回答 1

4

我们有两个选择,第一个是我们从移动运营商那里获取带有编码参数的 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 编码,但它是一个长代码,稍后将在适当的标题下发布。

于 2017-06-28T11:24:25.207 回答