掲題の通り。雪猫さんがそんな話をしてたので書いてみました。
さてどうやって140文字を数えよう。140文字を数えるのは意外と大変で、考慮しないといけないことを軽くあげると
- CRLFが2文字に見えるけど1文字として数える
- サロゲートペアを含む文字が2文字に見えるけどこっちも1文字として数える
- URLは22文字にする
- でもHTTPSは23文字にする
- しかも画像を添付すると枚数にかかわらず23文字として数える
- かといってユーザ名とパスワードを含むURLはそのまま数える
- さらに"."を2個以上含むccTLDはスキームがなくても22文字として数える
- ところがgTLDの場合は"."を1個以上含む場合22文字とする
などなど。他にもいっぱいあって非常にめんどくさいです。
そこでとりあえず諦めてこれをつかいます。
考えたくないいろいろをいい感じにしてくれる凄いやつです。
これを使って140文字を数えたコードがこちら。
public static int TweetLength(this string s) { var validator = new Validator(); return validator.GetTweetLength(s) - CountCrLf(s); } private static int CountCrLf(string s) { int n = 0, p = -2; while ((p = s.IndexOf("\r\n", p + 2)) >= 0) n++; return n; }
CRLFを2文字として数えてしまう問題は残っているので、CRLFを探してその分減らしてつじつま合わせ。たぶん大丈夫なはず。