Подсчет символов
Длина твита измеряется количеством кодовых точек в нормализованной версии NFC текста.
В Swift,Вы можете получить нормализованную форму NFC через precomposedStringWithCanonicalMapping
, а число кодовых точек - unicodeScalars.count
.
Итак, правильный код в Swift должен выглядеть следующим образом:
var str = "℞"
let r = str.precomposedStringWithCanonicalMapping.unicodeScalars.count
print(r) //->1
Приведенный выше код показывает непротиворечивый результат с некоторыми счетчиками символов в Интернете. Я не понимаю, почему вы получаете 2
для ℞
.
(Спасибо Ракеша Шастри.) Я считаю, что приведенный выше код правильнореализует спецификацию, описанную в документации, которую я связал выше.
Но сообщается, что реальный Twitter не работает точно так же, как в документе.(Извините, я не пишу в Твиттере.) Возможно, нам нужно угадать или найти другой надежный источник, чтобы он соответствовал реальному Twitter.
Я попробовал официальную библиотеку text Tweet parsing library, но он показывает тот же результат, что и мой код.
let len = TwitterText.tweetLength(str)
print(len) //->1
(Хотя код TwitterText.tweetLength(_:)
гораздо сложнее, поскольку он обрабатывает t.co links Таким образом, когда некоторые URL-адреса включены в текст, он генерирует вывод, отличный от моего кода.)
( UPDATE )
Я не уверентак как указанные твиттер-приложения не имеют открытого исходного кода, но я предполагаю, что они показывают взвешенную длину , описанную на странице библиотеки анализа текста Tweet , ссылка на которую приведена выше.
Youможет потребоваться написать что-то подобное с импортом библиотеки с помощью pod.
let config = TwitterTextConfiguration(fromJSONResource: kTwitterTextParserConfigurationV2)
let parser = TwitterTextParser(configuration: config)
let result = parser.parseTweet(str)
print(result.weightedLength) //->2