Подсчет символов в Твиттере - PullRequest
0 голосов
/ 07 октября 2018

У меня есть программа, это редактор для твитов Твиттера, который считает текст размером менее 280 символов.

Я использую это свойство utf8, например:

var str = "℞"
let r = str.utf8.count

Результат = 3

Этот символ (℞) и больше похож на то, что он занимает всего 2 символа в твиттере, но результат в этом коде дал мне 3, поэтому я не могу дать пользователюТочное количество символов!

Как я могу получить правильный счет: 2

1 Ответ

0 голосов
/ 07 октября 2018

Подсчет символов

Длина твита измеряется количеством кодовых точек в нормализованной версии 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...