Почему я получаю незнакомую строку, когда отправляю смайлики из 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 .
}

Возможно, вы захотите выбрать лучшие имена функций, и я надеюсь, что эта работа.

Другие вопросы по тегам