我有一个程序,它是一款Twitter推文编辑器,它会计算文字数量以确保不超过280个字符的限制。
为此,我使用了utf8属性,就像这样:
var str = "℞"
let r = str.utf8.count
结果 = 3
这个符号(℞)和类似的符号在 Twitter 计数器中只占用了2个字符,但是在这段代码中的结果却是3,因此我无法给用户提供准确的字符计数!
我该如何获取正确的计数:2
推文长度是使用文本的 NFC 规范化版本中的代码点数量来测量的。
在 Swift 中,您可以通过 precomposedStringWithCanonicalMapping
获取 NFC 规范化形式,并通过 unicodeScalars.count
获取代码点数量。
因此,在 Swift 中,正确的代码应该像这样:
var str = "℞"
let r = str.precomposedStringWithCanonicalMapping.unicodeScalars.count
print(r) //->1
2
作为 ℞
的结果。
let len = TwitterText.tweetLength(str)
print(len) //->1
TwitterText.tweetLength(_:)
的代码要复杂得多,因为它处理 t.co链接。 因此,当文本中包含某些URL时,它会生成不同于我的代码的输出。
let config = TwitterTextConfiguration(fromJSONResource: kTwitterTextParserConfigurationV2)
let parser = TwitterTextParser(configuration: config)
let result = parser.parseTweet(str)
print(result.weightedLength) //->2