Ios 获取Twitter字符数

Ios 获取Twitter字符数,ios,swift,string,xcode,twitter,Ios,Swift,String,Xcode,Twitter,我有一个程序,它是Twitter推文的编辑器,它计算文本,使其少于280个字符,作为Twitter限制 我使用utf8属性,如下所示: var str = "℞" let r = str.utf8.count var str = "℞" let r = str.precomposedStringWithCanonicalMapping.unicodeScalars.count print(r) //->1 结果=3 这个符号(℞) 更像是在twitter计数器中只需要2个字符,但是代码

我有一个程序,它是Twitter推文的编辑器,它计算文本,使其少于280个字符,作为Twitter限制

我使用utf8属性,如下所示:

var str = "℞"
let r = str.utf8.count
var str = "℞"
let r = str.precomposedStringWithCanonicalMapping.unicodeScalars.count
print(r) //->1
结果=3

这个符号(℞) 更像是在twitter计数器中只需要2个字符,但是代码中的结果给了我3个字符,所以我不能给用户准确的字符数

如何获得正确的计数:2

Tweet长度是通过NFC中的码点数来测量的 文本的规范化版本

在Swift中,您可以通过
precomposedStringWithCanonicalMapping
获取NFC规范化表单,并通过
unicodeScalars.count
获取代码点的数量

因此,Swift中的正确代码应如下所示:

var str = "℞"
let r = str.utf8.count
var str = "℞"
let r = str.precomposedStringWithCanonicalMapping.unicodeScalars.count
print(r) //->1
上面的代码显示了与web上某些字符计数器一致的结果,我不明白为什么您得到
2
for


(感谢Rakesha Shastri。) 我相信上面的代码正确地实现了我上面链接的文档中描述的规范

但据报道,实际的推特并不完全像文档中那样工作。(对不起,我自己不推特。)我们可能需要猜测或找到另一个可靠的来源,使其适合实际的推特


我尝试了官方库,但它显示的结果与我的代码相同

let len = TwitterText.tweetLength(str)
print(len) //->1
(尽管如此,
TwitterText.tweetLength(:)
的代码要复杂得多,因为它可以处理。因此,当一些URL包含在文本中时,它会生成与我的代码不同的输出。)


更新

我不确定,因为提到的推特应用程序不是开源的,但我猜它们显示了上面链接的文本推特解析库页面中描述的加权长度

在使用pod导入库时,可能需要编写类似这样的代码

let config = TwitterTextConfiguration(fromJSONResource: kTwitterTextParserConfigurationV2)
let parser = TwitterTextParser(configuration: config)
let result = parser.parseTweet(str)
print(result.weightedLength) //->2

我读了同一份文档,认为这就是解决方案。但是如果你去推特并键入字符,它会将其计算为2,而不是1。@Rakeshashstri,谢谢。可能会发生这种情况,一些实际的实现比文档中记录的要多。我在上面添加了注释。这个符号在iphone的推特应用程序中以及在推特机器人应用程序中使用了2个字符!!@user2713544,谢谢。我“我在网上闲逛,因为Rakesha Shastri告诉我你的例子是真实的Twitter shows 2。但是很抱歉,我到现在为止还没有找到任何线索。顺便说一句,因为似乎没有一种官方的方式来报告我能找到的bug,我注册了一个Twitter帐户,并在@TwitterSupport上发布了关于这个文档bug的推文:。我们会看看是否有什么结果。”当然。