Как я могу правильно получить подстроку из строки Swift, которая содержит смайлики? - PullRequest
0 голосов
/ 15 ноября 2018

Я не понимаю, что здесь происходит:

let strA = "0123456789"
let fromA = String.Index(encodedOffset: 2)
let toA = String.Index(encodedOffset: 8)
print("\(String(strA[fromA..<toA]))") // Prints "234567".

let strB = "0123??56?89"
let fromB = String.Index(encodedOffset: 2)
let toB = String.Index(encodedOffset: 8)
print("\(String(strB[fromB..<toB]))") // Prints "23??".

Я ожидаю, что нижняя строка напечатает "23??56?", но напечатает "23??".Похоже, это проблема, связанная с кодовыми точками Юникода и частичным обрезанием части последнего символа смайлика Юникода.

Как получить ожидаемую строку "23??56?", используя смещения видимых символов?

Моя проблема связана с API-интерфейсом Twitter и его расширенными объектами JSON твитов, которые требуют, чтобы вы сократили размер текста твита до размера, используя значения display_text_range.Прямо сейчас мой код вылетает всякий раз, когда в твите есть эмодзи, поскольку мой код подстроки, как указано выше, повреждает строку.

1 Ответ

0 голосов
/ 15 ноября 2018

Следующее делает то, что я хочу, и печатает "23??56?".

let strB = "0123??56?89"
print("String count \(strB.count).")
let fromB = strB.index(strB.startIndex, offsetBy: 2)
let toB = strB.index(strB.startIndex, offsetBy: 8)
print("\(String(strB[fromB..<toB]))")

Примечание вместо использования:

let fromB = String.Index(encodedOffset: 2)
let toB = String.Index(encodedOffset: 8)

Я использую:

let fromB = strB.index(strB.startIndex, offsetBy: 2)
let toB = strB.index(strB.startIndex, offsetBy: 8)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...