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