我有一个 C# 控制台应用程序,想发布推文。我目前正在使用 TweetSharp 作为 api 包装器。当发布超过 140 个字符的推文时,我收到一个禁止错误。有没有办法将这些推文自动截断为 140 个字符?
我尝试通过 .Substring(0, 140) 手动执行此操作,但我认为 TweetSharp 在发布时会自动转换为 UTF-8,如果字符串中有与号,TweetSharp 会将我的 140 截断文本字符串转换为 141+然后无法发布的字符串。
我有一个 C# 控制台应用程序,想发布推文。我目前正在使用 TweetSharp 作为 api 包装器。当发布超过 140 个字符的推文时,我收到一个禁止错误。有没有办法将这些推文自动截断为 140 个字符?
我尝试通过 .Substring(0, 140) 手动执行此操作,但我认为 TweetSharp 在发布时会自动转换为 UTF-8,如果字符串中有与号,TweetSharp 会将我的 140 截断文本字符串转换为 141+然后无法发布的字符串。
你可以做这样的事情。
只需截断您的字符串并使用附加代码删除禁止的剩余部分。
var myResult = TruncateString(yourinput, 137).VariableSafeString();
这里是使用 remove 截断。
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]+", "");
}
}
我想你可能需要稍微调整一下正则表达式。祝好运并玩得开心点 :)