![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
sibmail |
![]()
Сообщение
#1
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
в программе я использую 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");..... то все работает. как получить корректный код??? |
|
|
DIMEDROLL |
![]()
Сообщение
#2
|
![]() Участник ![]() ![]() Группа: Участник Сообщений: 165 Регистрация: 28.9.2008 Из: Киев Пользователь №: 304 Спасибо сказали: 23 раз(а) Репутация: ![]() ![]() ![]() |
что то я не понял, а что ты хотел получить?
|
|
|
sibmail |
![]()
Сообщение
#3
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
хотел тот же код получить
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#4
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
sibmail |
![]()
Сообщение
#5
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
vadim303 |
![]()
Сообщение
#6
|
Студент ![]() Группа: Новичок Сообщений: 14 Регистрация: 18.1.2010 Пользователь №: 1382 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
Имхо вы загоняете в QString символ я в кодировке cp1251, а потом получаете код этого символа в юникоде. Так что вполне логичный результат "я" как раз в юникоде имеет код 1103 (0x044F)
![]() |
|
|
sibmail |
![]()
Сообщение
#7
|
Студент ![]() Группа: Участник Сообщений: 63 Регистрация: 20.3.2009 Пользователь №: 626 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#8
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
оставил только CodecForCString а зачем ты его оставил?все равно не работает тогда подскажите как в моем случае получить код 255 из символа я toASCII?spec_symbol+=(char)code; //spec_symbol="я" и так лучше не присваивать, коль скоро с буковками работаешь. Используй fromASCII
|
|
|
vadim303 |
![]()
Сообщение
#9
|
Студент ![]() Группа: Новичок Сообщений: 14 Регистрация: 18.1.2010 Пользователь №: 1382 Спасибо сказали: 2 раз(а) Репутация: ![]() ![]() ![]() |
тогда подскажите как в моем случае получить код 255 из символа я Читаем хелп, там всё написано. Если вкратце, то т.к. QString хранит всё в юникоде, то оператор += должен преобразовать ваш восьмибитный символ в юникод. Он это делает с помощью кодека установленного с помощью QTextCodec::setCodecForCStrings(). В данном случае, т.к. установлен кодек cp1251, однобайтный символ с кодом 255 преобразуется в юникод (utf-16) c кодом 0x044F. Теперь чтобы получить обратно символ в кодировке cp1251 надо использовать преобразование с установленным соответствующим кодеком. Например вышеупомянутая функция toAscii() использует кодек QTextCodec::setCodecForCStrings() и в нашем случае это подходит. Также подойдёт функция toLocal8Bit(), т.к. мы также установили наш кодек и в QTextCodec::codecForLocale(). ну и на будущее да, чтобы было очевидней, какой кодек используем при загонке в QString используйте явные преобразования: fromLocal8Bit(), fromAscii(), tr() и т.п. иначе почаще пользуем хэлп ![]() |
|
|
![]() ![]() ![]() |
![]() |
Текстовая версия | Сейчас: 17.2.2025, 7:25 |