Russian Qt Forum

Qt => Вопросы новичков => Тема начата: EricVoyager от Август 14, 2012, 15:06



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

Спасибо.


Название: Re: Проблема с юникод
Отправлено: Странник от Август 14, 2012, 15:11
шрифты?


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 14, 2012, 15:15
да вот тоже подумал...) чё-нибудь да забуду всегда)
спасибо)


Название: Re: Проблема с юникод
Отправлено: LisandreL от Август 14, 2012, 15:16
Кодировку заодно посмотрите какую используете.


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 16, 2012, 12:01
Вот тут ещё одна проблемка возникла, тоже с символами юникода, поэтому спрошу тут.

str.append(QChar(0x000A));

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

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

Char выдаёт то же самое. И char и qchar считают 0x000A как CR+LF, удалить один из них из строки не удаётся - удаляются оба сразу.


Название: Re: Проблема с юникод
Отправлено: Serr500 от Август 16, 2012, 14:31
Попробуйте использовать вместо QString QByteArray.


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 16, 2012, 14:58
Нет, не помогает.

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

Есть ещё идеи?


Название: Re: Проблема с юникод
Отправлено: Kurles от Август 16, 2012, 15:03
Нет, не помогает.

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

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


Название: Re: Проблема с юникод
Отправлено: kambala от Август 16, 2012, 15:08
Нет, не помогает.

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

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


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 16, 2012, 16:03
Спасибо большое!
Только вопрос... наверно глупый.
А у кого, собсно, ремувить, то? QString-то уже записана в QTextStream.


Название: Re: Проблема с юникод
Отправлено: kambala от Август 16, 2012, 16:28
QTextStream открывается на чём-то, например на строке или файле. если на файле, то сначала всё записать в строку, а после удаления символов записать её в файл.


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 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(...) и к кому его применить?


Название: Re: Проблема с юникод
Отправлено: Kurles от Август 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();
 
примерно так, я думаю.


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 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();


Название: Re: Проблема с юникод
Отправлено: EricVoyager от Август 16, 2012, 17:45
Короче, разобрался.
Если кому интересно - просто отправил строку в QByteArray, там пришлось вручную поменять байты местами (LE на BE), так как не нашёл работающей функции у QString для этого, а потом QByteArray записал в файл. Прокатило.