【问题标题】:Why does Twitter say my status update is over 140 characters when I only posted 130?为什么 Twitter 说我的状态更新超过 140 个字符,而我只发布了 130 个字符?
【发布时间】:2014-11-05 21:18:45
【问题描述】:

我已经能够在 iOS 上发布数百次推文,但我遇到了一条我无法发推的推文。这条推文只有 130 个字符,但 Twitter 回应称它超过 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,但字符数相同。

【问题讨论】:

  • 我猜它与 URL 有关,也许他们正在尝试 t.co-ify 链接或其他什么?尝试用相同数量的文本替换 URL,看看问题是否仍然存在..
  • 没有办法取回转换后的消息吗?似乎有些东西正在修改原始内容,例如添加 http://
  • 我不相信 URL 正在被转换。发布成功后,我的 URL 将保持不变。
  • 更正:URL 出现没有改变,但是当我将鼠标悬停在它上面时,我看到它已转换为 22 个字符的 t.co/XXX url。

标签: ios objective-c cocoa-touch twitter


【解决方案1】:

您的网址可能计为 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 包裹。”

【讨论】:

  • 我的 URL 被转换为超长的t.co/XXXXXXXXXXXXX,不是 20 个字符,而是 22 个字符!肉眼看来,我的 URL 似乎没有改变,但如果我将鼠标悬停在它上面,我可以看到真正的 t.co URL。哇! Twitter 的 URL 缩短服务其实是一种加长服务。
【解决方案2】:

问题在于 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

【讨论】:

    猜你喜欢
    • 2016-02-19
    • 2018-06-11
    • 1970-01-01
    • 1970-01-01
    • 2011-08-25
    • 2011-04-23
    • 1970-01-01
    • 2012-03-16
    • 1970-01-01
    相关资源
    最近更新 更多