Ошибки APK

В SMS буква ə укорачивает сообщение до 70 знаков

Простые латинские буквы вмещают 160 знаков в одну SMS. ə, ö, ü, ğ, ş, ç и ı в той таблице нет. Одной хватает, чтобы всё сообщение перешло в другую таблицу: предел становится 70. В длинном сообщении части делятся по 67 знаков.

Турецкая таблица оператора может держать ö, ü, ğ, ş, ç и ı. Буквы ə нет и там. Большинство шлюзов турецкую таблицу не включают, поэтому все эти буквы сбрасывают сообщение на 70.

Замена буквы на e меняет слово. əl и el — не одно и то же. Сначала посчитай.

  • Код печатает два числа. Сто букв a — это одна часть. Те же сто знаков с ə впереди — две части.
  • Одной ə достаточно. Сообщение уходит на 70, даже если остальные буквы латинские.
  • 71 знак — это две части. Дальше деление по 67: до 134 две части, 135 — три.
  • Эмодзи тоже сбрасывает сообщение на 70 и иногда занимает два места. Этот счётчик это отдельно не считает.
  • Убирать букву — менять смысл. Перед отправкой посмотри число частей.
XUSUSI = set("əƏöÖüÜğĞşŞçÇıİ")

def hisseler(metn: str) -> int:
    ucs = any(h in XUSUSI for h in metn)
    n = len(metn.encode("utf-16-le")) // 2
    if not ucs:
        return 1 if n <= 160 else (n + 152) // 153
    return 1 if n <= 70 else (n + 66) // 67

print(hisseler("a" * 100))
print(hisseler("ə" + "a" * 99))

Похожие руководства