crossplatform.ru

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


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

Введите в поле код из 6 символов, отображенных в виде изображения. Если вы не можете прочитать код с изображения, нажмите на изображение для генерации нового кода.
 

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


Последние 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 Текстовая версия Сейчас: 29.3.2024, 10:24