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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: проблема с кодировкой  (Прочитано 3562 раз)
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« : Август 26, 2016, 11:01 »

Здравствуйте имею проблему с кодировкой символов в ос AstraLinux основанной на debian
привожу код небольшой
Код
C++ (Qt)
QFile file("/usr/local/szi/etc/all_task_name");
if (file.open(QIODevice::ReadOnly))
{
   while (!file.atEnd())
  {
        char df[200];
        char buf[200];
        file.readline(buf,sizeof(buf));
        QString dan= QString::fromLocal8bit(buf);
       dan=dan.remove("\n");
       sprintf(df,"%s",dan.toUtf8().data());
  }
 
}
 
Смысл в том что происходит чтение из файла
я читаю из файла закодированного ut8 строку с русскими буквами
и затем мне нужно записать эту строку в массив
но в массив пишется не русский текст а мусор
может кто подскажет какие либо варианты....
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #1 : Август 26, 2016, 11:05 »

а почему ты декодируешь прочитанную строку через fromLocal8bit, если у тебя там UTF-8?
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #2 : Август 26, 2016, 11:25 »

я пробовал разные варианты

в том числе и utf8

результат один и тот же
в переменную QString dan записываются русские символы нормально
а вот в массив df уже нет
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #3 : Август 26, 2016, 11:34 »

а как ты проверял, что там неправильно записано? сделал вывод в консоль / посмотрел в дебаггере или именно байты проверил?
Записан

Изучением 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
koldun90
Крякер
****
Offline Offline

Сообщений: 345


Просмотр профиля
« Ответ #4 : Август 26, 2016, 12:23 »

в дебагере.....
Записан
qate
Супер
******
Offline Offline

Сообщений: 1175


Просмотр профиля
« Ответ #5 : Август 26, 2016, 12:54 »

for (auto l: QString::fromUtf8(file.readAll()).split("\n"))  qDebug() << l;


Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4724



Просмотр профиля WWW
« Ответ #6 : Август 26, 2016, 14:45 »

в дебагере.....
русские буквы в UTF-8 кодируются двумя байтами, а у тебя однобайтный массив — неудивительно, что в дебаггере видна белиберда. сравни байты из полученного массива с байтами из файла.
Записан

Изучением 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
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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