Asp.net String.Length считая возвращение как 2 символа? - PullRequest
3 голосов
/ 11 ноября 2011

Я подсчитываю символы сообщения из текстового поля, которое будет отправлено в виде смсрассчитывает 2 символа для этого, есть ли способ сохранить новую строку, но получить счетчик, чтобы быть точным, или сам возврат 2 символа ???

Ответы [ 3 ]

7 голосов
/ 11 ноября 2011

Новая строка в Windows действительно состоит из 2 символов - CrLf - ASCII 13, за которым следует ASCII 10.

Вы можете просто уменьшить 2 от возвращенного Length или получить счетчик всех Environment.NewLine, удвоить это на 2 и уменьшить от Length.

2 голосов
/ 11 ноября 2011

Ввод текстового поля даст вам 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 - когда другие кодировки недостаточны, они относятся к суррогатам так же, как и к длине.

0 голосов
/ 11 ноября 2011
string msg = "bla bla etc.\r\nSome more bla";
int length = msg.Replace("\r\n","").Length;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...