2011-11-11 11 views
3

smで送信されるテキストボックスからのメッセージの文字数をカウントするIm txtBody.Text.Lengthが改行のためにより多くの文字をカウントしていることに気付きました。改行の書式を保持したいのですが、.netこれは2文字を数えています。新しい行を保持する方法はありますが、正確になるようにするにはカウンタが必要です。Asp.net String.Lengthカウントは2文字として返されますか?

+1

改行文字をSMSメッセージに残しておくと、改行文字の数は無視されます - SMSの168文字にカウントされます。 –

+0

@Neil 168?私は160,140,​​70(1つずつの代理を数えます)と1つのメッセージあたり155の文字を提供するエンコードシナリオを知っています。いつあなたは168を得ることができますか? –

+0

@Jon私の間違い - その160文字。私はどちらかから168を得たかわからない。そのためのユニットテストを追加してください。 –

答えて

2

ユーザーがWindows上で"\u000D\u000A"(または同じことを意味している"\r\n"短い)と同じである(いくつかの比較的奇妙なコピー&ペーストがなければ)新しい行を、入力がある時はいつでもテキストボックスの入力はあなたにEnvironment.Newlineを与えます。

SMSの送信には、本当にU + 000Aを使用する必要があります。

これ以上の作業を行う前に、msg.Replace("\r\n", "\n")を入力してください。あなたが望む長さの結果を得るだけでなく、SMSが必要としない無駄な文字を減らし、あらゆる文字はSMSの場合にカウントされます。

msg.Replace("\r\n", "\n").Replace('\r', '\n\')にさらに正規化して、Windows以外の通常の改行(いくつかのシナリオでは起こります)を使用して、奇妙なコピーペーストデータを理解することができます。

GSM 7ビットのアルファベットの中にいなければ、さらに複雑になりますが、8ビットの中にいなければ少なくとも合併症は.NETとSMS; .NETはUTF-16を使用しており、他のエンコーディングでは不十分な場合はSMSが行いますが、長さに関わらず代理を扱います。

+0

これは私に完全に答えました。システムはmsg.Replace( "\ r \ n"、 "\ n")でうまくいくように、他のソースからのコピーを許可しません..ありがとう – Ryan86

+0

\ rとにかく害を及ぼさないでしょう。他のタスクに関しては正規化する。 –

7

ウィンドウ内の改行は確かに2つの文字です - CrLf - ASCIIに続くASCII 13 10

あなたは、単にすべてのEnvironment.NewLineのカウントを返さLengthから2をデクリメント、または取得することができ、その2およびデクリメントすることにより、二重Lengthから。

0
string msg = "bla bla etc.\r\nSome more bla"; 
int length = msg.Replace("\r\n","").Length; 
関連する問題