C#Console App - 自动截断140个Chars推文

时间:2012-09-01 03:40:34

标签: c# twitter twitter-oauth

我有一个C#控制台应用,想发布推文。我目前正在使用TweetSharp作为api包装器。当发布超过140个字符的推文时,我得到一个禁止的错误。有没有办法将这些推文自动截断为140个字符?

我尝试通过.Substring(0,140)手动执行此操作,但我认为TweetSharp在发布时会自动转换为UTF-8,如果我在字符串中有一个&符号,TweetSharp会将我的140个截断文本字符串转换为一个141+字符串然后无法发布。

1 个答案:

答案 0 :(得分:1)

你可以这样做。

只需截断字符串并删除带有附加代码的禁止遗骸。

var myResult = TruncateString(yourinput, 137).VariableSafeString();

这是使用删除截断。

private string TruncateString(string input, int length)
{
    if (input == null || input.Length < length)
        return input;

    return input.Remove(length, input.Length - length) + "...";
}

以及一些扩展方法

public static class StringMethods
{
    /// <summary>
    /// Remove nordic characters and accents
    /// Example
    ///     "ÅÄÖ / \\íå íàøëîñü ôîðìû äëÿ îòïðàâêè" will be returned as "AAO / \\ia iaøeinu oiðiu aey ioiðaaee"
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public static string RemoveDiacritics(this string s)
    {
        string normalizedString = s.Normalize(NormalizationForm.FormD);
        StringBuilder stringBuilder = new StringBuilder();
        for (int i = 0; i < normalizedString.Length; i++)
        {
            char c = normalizedString[i];
            if (CharUnicodeInfo.GetUnicodeCategory(c) != UnicodeCategory.NonSpacingMark)
                stringBuilder.Append(c);
        }
        return stringBuilder.ToString();
    }

    /// <summary>
    /// Make string variable safe
    /// Example
    ///     "ÅÄÖ / \\íå íàøëîñü ôîðìû äëÿ îòïðàâêè" will be returned as "AAOiaiaeinuoiiuaeyioiaaee"
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    public static string VariableSafeString(this string s)
    {
        return Regex.Replace(s.RemoveDiacritics(), "[^0-9a-zA-Z]+", "");
    } 
}

我想你可能需要稍微调整正则表达式。祝你好运,玩得开心:)