为什么Twitter说我的状态更新超过140个字符,当我只发布130?

时间:2014-09-11 19:36:19

标签: ios objective-c cocoa-touch twitter

我已经能够在iOS上发布数百次推文了,但是我已经发布了一条推文,而我却无法推文。这条推文只有130个字符,但推特回应声称它超过140个字符。所以Twitter不会发布它。

相关代码:

- (void)tweet:(NSString *)message
{
    SLRequest* request = [SLRequest
        requestForServiceType:SLServiceTypeTwitter
        requestMethod:SLRequestMethodPOST
        URL:[NSURL URLWithString:[NSString stringWithFormat:
            @"%@statuses/update.json",
            API_BASE_URL
        ]]
        parameters:@{
            @"status": message
        }
    ];
    request.account = self.context.account;
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *eror) {
        if (responseData != nil) {
            NSLog(@"%@", [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding]);
        }
     ];
}

控制台打印输出:

(lldb) po message
@juandoming Dallas teachers improved student performance by 20% w/mobile video messaging. Would this be useful to you? Ccccccc.com

(lldb) p message.length
(unsigned int) $1 = 130
2014-09-11 12:25:01.326 app[1685:6b13] {"errors":[{"code":186,"message":"Status is over 140 characters."}]}
(lldb) 

实际网址不是Ccccccc.com,但它的字符数相同。

2 个答案:

答案 0 :(得分:4)

您的网址可能只有20个字符。

https://twittercommunity.com/t/getting-the-text-of-your-tweet-is-too-long-error-with-140-character-tweets/13307

"出于所有意图和目的,在撰写推文时,所有URL和大多数看似URL的内容应该基本上被视为20个字符。正确呈现t.co链接的客户端和网站使此过程大部分都是透明的 - 您将在UI中看到原始bit.ly链接的表示,但在其下方仍然使用t.co包装"

答案 1 :(得分:0)

问题在于twitter计数字符的方式不同。 Twitter更具体地使用Unicode,UTF-8,并且为了计数字符,Twitter计算字节数以形成一个字符 这里是文档链接:https://developer.twitter.com/en/docs/basics/counting-characters

为了解决这个问题,Twitter创建了一个具有某些功能的库,它确实非常有用。 https://github.com/twitter/twitter-text 支持的语言是Java,Ruby,JavaScript和Objective-C

这是我获取推文长度的方法,解决推文问题需要更短一些。

const twitterText = require('twitter-text')
twitterText.parseTweet(YOURTWEET).weightedLength