WedX - журнал о программировании и компьютерных науках

Разделить строку с эмодзи

Мне нужно разделить QString в массиве всех символов. Он может содержать emoji.
QString: ???? ???? ???? ???? ???? ????
После string.split(""):

""
"?"
"?"
" "
"?"
"?"
" "
"?"
"?"
" "
" "
"?"
"?"
" "
"?"
"?"
" "
"?"
"?"
""

Я понимаю, что смайлики могут занимать более 1 байта, но как мне тогда разделить строку? Спасибо.

22.11.2014

  • Какой-то конкретный язык? 23.11.2014
  • Я вас не понял.. Это Qt. 23.11.2014
  • Qt — это библиотека. С привязками для нескольких языков. 23.11.2014

Ответы:


1

Насколько я вижу, QString не поддерживает символы Юникода больше, чем U+FFFF. В этом тестовом сценарии вы можете видеть, что он не может правильно рассчитать размер строки для этих символов:

#include <QDebug>

int main()
{
    QList<QByteArray> list;
    list << QByteArray("a");
    list << QByteArray("ö");
    list << QByteArray("➜");
    list << QByteArray("☀");
    list << QByteArray("⚡");
    list << QByteArray("????");
    list << QByteArray("????");
    list << QByteArray("????");

    foreach (QByteArray binary, list)
    {
        QString str = QString::fromUtf8(binary);
        qDebug() << str;
        qDebug() << "Bytes:" << binary.size();
        qDebug() << "String size:" << str.size();
        {
            QDebug debugLine = (qDebug() << "Unicode code point:");
            for (int i = 0; i < str.size(); ++i)
            {
                debugLine << str[i].unicode();
            }
        }
        qDebug() << "";
    }

    return 0;
}

Выход:

"a"
Bytes: 1
String size: 1
Unicode code point: 97

"ö"
Bytes: 2
String size: 1
Unicode code point: 246

"➜"
Bytes: 3
String size: 1
Unicode code point: 10140

"☀"
Bytes: 3
String size: 1
Unicode code point: 9728

"⚡"
Bytes: 3
String size: 1
Unicode code point: 9889

"????"
Bytes: 4
String size: 2
Unicode code point: 55357 56832

"????"
Bytes: 4
String size: 2
Unicode code point: 55357 57030

"????"
Bytes: 4
String size: 2
Unicode code point: 55357 56373
23.11.2014
  • Итак.. Нельзя разделить строку и поместить символы в QList? 23.11.2014
  • На данный момент я не вижу ни одного с QString. Но я не могу гарантировать, что мое исследование полностью охватывает эту тему. 23.11.2014
  • Новые материалы

    Как проанализировать работу вашего классификатора?
    Не всегда просто знать, какие показатели использовать С развитием глубокого обучения все больше и больше людей учатся обучать свой первый классификатор. Но как только вы закончите..

    Работа с цепями Маркова, часть 4 (Машинное обучение)
    Нелинейные цепи Маркова с агрегатором и их приложения (arXiv) Автор : Бар Лайт Аннотация: Изучаются свойства подкласса случайных процессов, называемых дискретными нелинейными цепями Маркова..

    Crazy Laravel Livewire упростил мне создание электронной коммерции (панель администратора и API) [Часть 3]
    Как вы сегодня, ребята? В этой части мы создадим CRUD для данных о продукте. Думаю, в этой части я не буду слишком много делиться теорией, но чаще буду делиться своим кодом. Потому что..

    Использование машинного обучения и Python для классификации 1000 сезонов новичков MLB Hitter
    Чему может научиться машина, глядя на сезоны новичков 1000 игроков MLB? Это то, что исследует это приложение. В этом процессе мы будем использовать неконтролируемое обучение, чтобы..

    Учебные заметки: создание моего первого пакета Node.js
    Это мои обучающие заметки, когда я научился создавать свой самый первый пакет Node.js, распространяемый через npm. Оглавление Глоссарий I. Новый пакет 1.1 советы по инициализации..

    Забудьте о Matplotlib: улучшите визуализацию данных с помощью умопомрачительных функций Seaborn!
    Примечание. Эта запись в блоге предполагает базовое знакомство с Python и концепциями анализа данных. Привет, энтузиасты данных! Добро пожаловать в мой блог, где я расскажу о невероятных..

    ИИ в аэрокосмической отрасли
    Каждый полет – это шаг вперед к великой мечте. Чтобы это происходило в их собственном темпе, необходима команда астронавтов для погони за космосом и команда технического обслуживания..


    Для любых предложений по сайту: [email protected]