crossplatform.ru

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


  Ответ в Помогите с кодировками
Введите ваше имя
Подтвердите код

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
Теги
Выровнять по центру
Ссылка на тему
Ссылка на сообщение
Скрытый текст
Сокращение
Код с подсветкой
Offtopic
 
Удалить форматирование
Спец. элементы
Шрифт
Размер
 
Цвет шрифта
 
Отменить ввод
Вернуть ввод
Полужирный
Курсив
Подчеркнутый
 
 
Смайлики
Вставить изображение
Вставить адрес электронной почты
Цитата
Код
Раскрывающийся текст
 
Увеличить отступ
По левому краю
По центру
По правому краю
Вставить список
Вставить список

Опции сообщения
 Включить смайлы?
Иконки сообщения
(Опционально)
                                
                                
  [ Без иконки ]
 


Последние 10 сообщений [ в обратном порядке ]
vadim303 Дата 11.2.2010, 17:02
 
Цитата(sibmail @ 11.2.2010, 15:40) *
тогда подскажите как в моем случае получить код 255 из символа я


Читаем хелп, там всё написано. Если вкратце, то т.к. QString хранит всё в юникоде, то оператор += должен преобразовать ваш восьмибитный символ в юникод. Он это делает с помощью кодека установленного с помощью QTextCodec::setCodecForCStrings(). В данном случае, т.к. установлен кодек cp1251, однобайтный символ с кодом 255 преобразуется в юникод (utf-16) c кодом 0x044F. Теперь чтобы получить обратно символ в кодировке cp1251 надо использовать преобразование с установленным соответствующим кодеком. Например вышеупомянутая функция toAscii() использует кодек QTextCodec::setCodecForCStrings() и в нашем случае это подходит. Также подойдёт функция toLocal8Bit(), т.к. мы также установили наш кодек и в QTextCodec::codecForLocale().

ну и на будущее да, чтобы было очевидней, какой кодек используем при загонке в QString используйте явные преобразования: fromLocal8Bit(), fromAscii(), tr() и т.п. иначе почаще пользуем хэлп :)
Litkevich Yuriy Дата 11.2.2010, 15:44
 
Цитата(sibmail @ 11.2.2010, 18:25) *
оставил только CodecForCString

все равно не работает
а зачем ты его оставил?

Цитата(sibmail @ 11.2.2010, 18:40) *
тогда подскажите как в моем случае получить код 255 из символа я
toASCII?

Цитата(sibmail @ 11.2.2010, 16:54) *
spec_symbol+=(char)code; //spec_symbol="я"
и так лучше не присваивать, коль скоро с буковками работаешь. Используй fromASCII
sibmail Дата 11.2.2010, 15:40
 
Цитата(vadim303 @ 11.2.2010, 15:29) *
Имхо вы загоняете в QString символ я в кодировке cp1251, а потом получаете код этого символа в юникоде. Так что вполне логичный результат "я" как раз в юникоде имеет код 1103 (0x044F) ;)


тогда подскажите как в моем случае получить код 255 из символа я
vadim303 Дата 11.2.2010, 15:29
  Имхо вы загоняете в QString символ я в кодировке cp1251, а потом получаете код этого символа в юникоде. Так что вполне логичный результат "я" как раз в юникоде имеет код 1103 (0x044F) ;)
sibmail Дата 11.2.2010, 15:25
 
Цитата(Litkevich Yuriy @ 11.2.2010, 15:03) *
Цитата(sibmail @ 11.2.2010, 16:54) *
в программе я использую CP1251
устанавливаешь только
Цитата(sibmail @ 11.2.2010, 16:54) *
QTextCodec::setCodecForTr(codec);
локаль приложения менять не нужно


оставил только CodecForCString

все равно не работает
Litkevich Yuriy Дата 11.2.2010, 15:03
 
Цитата(sibmail @ 11.2.2010, 16:54) *
в программе я использую CP1251
устанавливаешь только
Цитата(sibmail @ 11.2.2010, 16:54) *
QTextCodec::setCodecForTr(codec);
локаль приложения менять не нужно
sibmail Дата 11.2.2010, 15:00
  хотел тот же код получить
DIMEDROLL Дата 11.2.2010, 14:22
  что то я не понял, а что ты хотел получить?
sibmail Дата 11.2.2010, 13:54
  в программе я использую CP1251
в main.cpp написал следующее
QTextCodec *codec=QTextCodec::codecForName("CP1251");
QTextCodec::setCodecForTr(codec);
QTextCodec::setCodecForCStrings(codec);
QTextCodec::setCodecForLocale(codec);

QString spec_symbol;
int code=255;
spec_symbol+=(char)code; //spec_symbol="я"

и теперь обратно от символа к коду

spec_symbol.at(0).unicode() //но здесь я уже получаю код 1103


Если в начале убрать QTextCodec *codec=QTextCodec::codecForName("CP1251");..... то все работает.

как получить корректный код???
Просмотр темы полностью (откроется в новом окне)
RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 5.7.2025, 5:34