Russian Qt Forum
Ноябрь 25, 2024, 06:31 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Проблема с юникод  (Прочитано 6332 раз)
EricVoyager
Гость
« : Август 14, 2012, 15:06 »

Как вывести символ на кнопку, имея его код?
Код:
PushButton->setText(QChar(65514));  
не прокатывает: вместо нужного символа - квадратик. Код взял из таблицы юникода.
Как-то странно...

Спасибо.
Записан
Странник
Гость
« Ответ #1 : Август 14, 2012, 15:11 »

шрифты?
Записан
EricVoyager
Гость
« Ответ #2 : Август 14, 2012, 15:15 »

да вот тоже подумал...) чё-нибудь да забуду всегда)
спасибо)
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #3 : Август 14, 2012, 15:16 »

Кодировку заодно посмотрите какую используете.
Записан
EricVoyager
Гость
« Ответ #4 : Август 16, 2012, 12:01 »

Вот тут ещё одна проблемка возникла, тоже с символами юникода, поэтому спрошу тут.

str.append(QChar(0x000A));

Необходимо добавить символ с номером 0A, т. е. конец строки (юниксовый, насколько я знаю), обозначается как LF. Вместо этого упорно добавляет два символа - CR (номер 0D, кажется) и LF, т.е виндовый конец строки. А мне нужен именно LF в единственном экземпляре.

Чё делать?)))

Char выдаёт то же самое. И char и qchar считают 0x000A как CR+LF, удалить один из них из строки не удаётся - удаляются оба сразу.
« Последнее редактирование: Август 16, 2012, 14:17 от EricVoyager » Записан
Serr500
Гость
« Ответ #5 : Август 16, 2012, 14:31 »

Попробуйте использовать вместо QString QByteArray.
Записан
EricVoyager
Гость
« Ответ #6 : Август 16, 2012, 14:58 »

Нет, не помогает.

Вообще-то я не сказал, но может быть "виноват" QTextStream.
Я строку/символ вывожу в файл, именно там и смотрю, чё к чему. У QTextStream задал кодировку UTF-16 BE.

Есть ещё идеи?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #7 : Август 16, 2012, 15:03 »

Нет, не помогает.

Вообще-то я не сказал, но может быть "виноват" QTextStream.
Я строку/символ вывожу в файл, именно там и смотрю, чё к чему. У QTextStream задал кодировку UTF-16 BE.

Есть ещё идеи?
По логике использовать QDataStream + QByteArray )
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #8 : Август 16, 2012, 15:08 »

Нет, не помогает.

Вообще-то я не сказал, но может быть "виноват" QTextStream.
Я строку/символ вывожу в файл, именно там и смотрю, чё к чему. У QTextStream задал кодировку UTF-16 BE.

Есть ещё идеи?
именно он и виноват, т.к. пишет концы строк соответствующие платформе. как вариант – после записи текста через QTextStream просто выполнить string.remove(QChar(CR code))
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
EricVoyager
Гость
« Ответ #9 : Август 16, 2012, 16:03 »

Спасибо большое!
Только вопрос... наверно глупый.
А у кого, собсно, ремувить, то? QString-то уже записана в QTextStream.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #10 : Август 16, 2012, 16:28 »

QTextStream открывается на чём-то, например на строке или файле. если на файле, то сначала всё записать в строку, а после удаления символов записать её в файл.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
EricVoyager
Гость
« Ответ #11 : Август 16, 2012, 16:40 »

Прошу прощения, всё-таки я что-то не понимаю.

Цитировать

QFile file1(<name>);
file1.open(QIODevice::WriteOnly | QIODevice::Text);
QTextStream out1(&file1);
out1.setCodec("UTF-16 BE");
QString str;

...
<манипуляции, включающие добавления QChar(0x000A)>
...

out1 << str;
file1.close();

Так в каком месте должен быть remove(...) и к кому его применить?
Записан
Kurles
Бывалый
*****
Offline Offline

Сообщений: 480



Просмотр профиля
« Ответ #12 : Август 16, 2012, 16:58 »

Код
C++ (Qt)
QFile file1(<name>);
QByteArray array;
QTextStream out1(&array);
out1.setCodec("UTF-16 BE");
QString str;
 
...
<манипуляции, включающие добавления QChar(0x000A)>
...
 
out1 << str;
QByteArray before;
before.append(0x0a);
before.append(0x00); //хз как этот символ в uft-16 be выглядит, возможно одного 0x0a достаточно, или порядок байт надо поменять
array.replace (before, QByteArray());
QFile file("out.txt");
if (!file.open(QIODevice::WriteOnly))
   return;
file.write(array);
file.close();
 
примерно так, я думаю.
Записан

Код
C++ (Qt)
while(!asleep()) sheep++;
EricVoyager
Гость
« Ответ #13 : Август 16, 2012, 17:13 »

Неа...

Во-первых, вместо before.append(0x0a); наверно вы имели ввиду "before.append(0x0d);", так как нам нужно выкинуть CR (номер 0x0D).
Во-вторых, ругается на before.append(0x00);. Пофиг, выкинул пока эту строку.
В-третьих, выводит пустой файл. Даже если убрать все манипуляции и оставить только
Код:
QFile file1(<name>);
QByteArray array;
QTextStream out1(&array);
out1.setCodec("UTF-16 BE");
QString str;
 
...
<манипуляции, включающие добавления QChar(0x000A)>
...
 
out1 << str;
file1.write(array);
file1.close();
Записан
EricVoyager
Гость
« Ответ #14 : Август 16, 2012, 17:45 »

Короче, разобрался.
Если кому интересно - просто отправил строку в QByteArray, там пришлось вручную поменять байты местами (LE на BE), так как не нашёл работающей функции у QString для этого, а потом QByteArray записал в файл. Прокатило.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.091 секунд. Запросов: 23.