Почему я получаю незнакомую строку, когда отправляю смайлики из iOS с помощью nativescript
Я работаю с приложением Nativescript + Vuejs и Nodejs + MongoDB на стороне сервера, и у меня возникают проблемы при отправке символов эмодзи с iOS (12.1.4) на сервер Nodejs.
Например, когда я посылаю смайлик SMILING FACE Emoji ГЛАЗАМИ С СЕРДЦЕ (), я надеюсь, что строка, похожая на & # x1f60d, может преобразовать в смайлик и сохранить на MongoDB
Но получите эту строку: \ Mp\M^_\M^X\M^M
Самым странным в этом случае является то, что это происходит только при отправке с моего устройства iOS 6.
В эмуляторе iOS 8 действие Emoji Send отлично работает.
Итак, я действительно не знаю, какова причина этой проблемы, может быть, мое устройство или конфигурации клавиатуры или UTF ...
Список некоторых строк смайликов, которые я получаю:
: \ Mp \ M ^ _ \ M ^ X \ M ^ @
: \ Mp \ M ^ _ \ M ^ X \ M ^ C
: \ Mp \ M ^ _ \ M ^ X \ M ^ N
: \ Mp \ M ^ _ \ M ^ T \ M-%
: \ Mp \ M ^ _ \ M ^ X \ M-!
Некоторая документация:
http://www.grumdrig.com/emoji-list/
https://apps.timwhitlock.info/emoji/tables/unicode
Пожалуйста, дайте мне какое-нибудь решение, или скажите, в чем заключается моя ошибка.
Благодарю.
1 ответ
Ваш код кодировки может быть упрощен до
extension String {
func encode(_ s: String) -> String {
let data = s.data(using: .nonLossyASCII, allowLossyConversion: true)!
return String(data: data, encoding: .utf8)!
}
}
Обратите внимание, что он кодирует все символы не ASCII как \uNNNN, а не только эмодзи. Декодирование осуществляется путем обращения преобразований:
extension String {
func decode(_ s: String) -> String? {
let data = s.data(using: .utf8)!
return String(data: data, encoding: .nonLossyASCII)
}
}
Это возвращает необязательный, потому что это может не сработать для неверного ввода.
Пример:
let s = "Hello ."
let e = encode(s)
print(e) // Hello \ud83d\ude03.
if let d = decode(e) {
print(d) // Hello .
}
Возможно, вы захотите выбрать лучшие имена функций, и я надеюсь, что эта работа.