Ввод текстового поля даст вам Environment.Newline
всякий раз, когда пользователь вводит новую строку (за исключением некоторого относительно странного вставки копии), которая в окнах такая же, как "\u000D\u000A"
(или более короткая "\r\n"
, что означает то же самое вещь).
Для отправки SMS вам действительно нужно использовать U + 000A.
Следовательно, вы можете просто сделать msg.Replace("\r\n", "\n")
, прежде чем приступить к дальнейшей работе. Вы не только получите желаемый результат длины, но и сократите количество потерянных символов, которые не нужны СМС, и каждый символ имеет значение, когда дело доходит до SMS, hnce hrribl nnsens lik dis!
Вы также можете нормализовать значение до msg.Replace("\r\n", "\n").Replace('\r', '\n\')
, чтобы получить больше смысла от странных вставленных копий данных с не-Windows-нормальными переносами строк (в некоторых случаях это случается).
Обратите внимание, что у вас будет больше сложностей, если вы не можете оставаться в пределах 7-битного алфавита GSM, хотя, если вы не можете остаться в пределах 8-битного, то, по крайней мере, ваши сложности будут совпадать между собой. NET и SMS; поскольку .NET использует UTF-16, а SMS - когда другие кодировки недостаточны, они относятся к суррогатам так же, как и к длине.