crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
> Преобразование строки, содержащей \u символы в читаемую строку
MishaUA
  опции профиля:
сообщение 1.11.2015, 15:07
Сообщение #1


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

Спасибо сказали: 13 раз(а)




Репутация:   0  


Здравствуйте!
Моя прога имеет дополнительный встроенный отладчик, основаный на QDebug+QBuffer.
Когда отладчик что-то получает, вызывается слот и результат можно считать через QBuffer->buffer(), а конвертация в текст происходит так: QTextCodec::codecForLocale()->toUnicode(QBuffer->buffer()).
С латиницей проблем нет, а вот с кирилицей, есть. С строку вся кирилица записывается в юникоде с приставкой \u. К примеру, строка "Start Старт" выглядит так: "Start \u0421\u0442\u0430\u0440\u0442".
Каким образом можно конвентировать эту строку в обычный вид, чтобы вместо 16-ричного значения были читаемые символы кроме как выковыривать каждый \u****, конвентировать его и записывать обратно?
Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 1.11.2015, 19:36
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Обычно QString нормально глотает такую строку, т.е.
QString s = "Start \u0421\u0442\u0430\u0440\u0442";
QLineEdit le;
le.setText(s);
получим корректную надпись.

По моему вот это QTextCodec::codecForLocale() и есть проблема.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MishaUA
  опции профиля:
сообщение 1.11.2015, 21:35
Сообщение #3


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

Спасибо сказали: 13 раз(а)




Репутация:   0  


Впринципе, Вы правы, если сделать конкретно так, то работает.
Возьмем более практичный пример. Допустим, есть объект QDebug, который подключен к QBuffer.
QDebug << tr("Start") << endl;

Есть файл переводов и tr("Start") переведен на русский.
К сигналу readyRead() QBuffer'a подключен слот и в нем:
QPlainTextEdit->appendPlainText(QBuffer->buffer());

В результате в QPlainTextEdit добавляется "\u0421\u0442\u0430\u0440\u0442" (прям вот так, с лапками).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
MishaUA
  опции профиля:
сообщение 1.11.2015, 22:41
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 185
Регистрация: 28.4.2013
Пользователь №: 3810

Спасибо сказали: 13 раз(а)




Репутация:   0  


Сделал так:
    QString    str(QBuffer->buffer());
    QTextCodec    *codec = QTextCodec::codecForName("UTF-16BE");
    if (codec) {
        // find \\u symbols
        int    index;
        while (1)
            if (((index = str.indexOf("\\u")) > -1) && (index < str.length()-5)) {
                QString    s = str.mid(index, 6), ss = s;

                s.remove("\\u");
                str.replace(ss, codec->toUnicode(QByteArray::fromHex(s.toLatin1().data())));
            }
            else break;

        //////////   теперь в str хранится готовая строка
    }
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 25.4.2024, 22:10