看起来我找到了解决方案。有几个问题。第一个是我的百分比编码函数不接受 unicode 字符,所以 twitter 用 � 响应。为了解决这个问题,我在 VB.Net 中使用了以下代码:
Regex.Replace(Uri.EscapeDataString(s), "[\!\*\'\(\)]", Function(m) Uri.HexEscape(Convert.ToChar(m.Value(0).ToString())))
第二个问题是 twitter 对所有空白字符都一视同仁。因此,您不能作弊并使用诸如 u+00A0(不间断空格)之类的字符或以下所列的任何其他字符:
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1548.pdf (6.4)
http://en.wikipedia.org/wiki/Whitespace_character
幸运的是,twitter 不包含零宽度空格作为空白字符。如果使用零宽度空间,twitter 实际上还允许通过 API 发布 141 个字符。这意味着您可以在 SMS 命令之后和空格之前添加 U+200B 以防止 SMS 命令运行。如:
Dim s as String = "M" & ChrW(8203) & " Username 140 character tweet posted here as a test. This is actually 141 characters because of the zero-width space. But accepted anyway."
希望这可以帮助!
更新:
对于那些正在寻找正则表达式代码的人来说,这是一个 1 班轮:
Regex.Replace(s, "^(ON|OFF|FOLLOW|F|UNFOLLOW|LEAVE|L|STOP|QUIT|END|CANCEL|UNSBSCRIBE|ARRET|D|M|RETWEET|RT|SET|WHOIS|W|GET|G|FAV|FAVE|FAVORITE|FAVORITE|\*|STATS|SUGGEST|SUG|S|WTF|HELP|INFO|AIDE|BLOCK|BLK|REPORT|REP)( )", Function(m) m.ToString.Replace(" ", ChrW(8203) & " "))