Почему я получаю незнакомую строку, когда отправляю смайлики из iOS с помощью nativescript - PullRequest
0 голосов
/ 12 февраля 2019

Я работаю с приложением Nativescript + Vuejs и Nodejs + MongoDB на стороне сервера, и у меня возникают проблемы при отправке символов эмодзи с iOS (12.1.4) на сервер Nodejs.

Например, когдаЯ посылаю смайлик для лица смайликов с глазами в форме сердца (?), я надеюсь, что строка, похожая на ? , может преобразовать в смайлики и сохранить на MongoDB

Но получите эту строку: \ Mp \ M ^ _ \ M ^ X \ M ^ M

Самое странное в этом случае - это то, что это происходит только при отправке с моего устройства iOS 6.

В эмуляторе iOS 8 действие отправки эмодзи работает нормально.

Итак, я действительно не знаю, какова причина этой проблемы, может быть, мое устройство, или клавиатура, или 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 Ответ

0 голосов
/ 12 февраля 2019

Ваш код кодировки может быть упрощен до

extension String {
    func encode(_ s: String) -> String {
        let data = s.data(using: .nonLossyASCII, allowLossyConversion: true)!
        return String(data: data, encoding: .utf8)!
    }
}

Обратите внимание, что он кодирует все символы, не входящие в ASCII, как \ uNNNN, а не только Emojis.Декодирование выполняется путем обращения преобразований:

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 ?.
}

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

...