Помогите, пожалуйста, решить проблему с QTextCodec. Я не знаю это

его такое странное поведение или нет. Допустим есть файл в кодировке UTF-8 with signature (BOM) codepage 65001. На двух разных компах установлена Windows 10 и VisualStudio 2019 которая и там, и там отображает файл в правильной кодировке UTF-8 with BOM.

В этом файле допустим хардкод строки на кириллице, выглядит это так:
QTextCodec* textCodec = QTextCodec::codecForName("Windows-1251");
textCodec->toUnicode("Русский язык");

Это осталось в сурсах случайно после перевода их всех на UTF-8, легаси проект.
Что самое удивительное, на одном компе с той же системой и студией после компиляции мы конечно увидим белеберду. Насколько я понял потому что QTextCodec пытается воспринять текст в UTF-8 (исходник же в UTF-8) как cp1251 а потом отобразить это в юникод. Если изменить кодек или просто его убрать всё работает.

Но на другом компе где студия тоже открывает этот файл в UTF-8 with BOM кодек работает нормально и возвращает ожидаемый результат. При этом если его убрать, то вместо текста мы увидим белеберду, будто исходник всё-таки в cp1251. То есть поведение прямо противоположное.

Но если попытаться открыть его в cp1251 то русский текст превратится в крякозябры, то есть файл всё-таки действительно в UTF-8 with BOM. Как такое поведение вообще можно объяснить и что в данном случае делать? Ведь исправление ошибки на одном компе ломает проект на другом и наоборот. Хотя поведение в первом случае более логичное, когда кодек становится причиной ошибки.

1 ответов

15 просмотров
Elnee-あめ Автор вопроса

На всякий случай напишу здесь ответ. Проблемы были в регионе. Не зависимо от кодировки файла MSVC без специальных флагов интерпретирует файл в кодировке локали. В отличии от GCC, который обращается к локали только после неудачной попытки интерпретировать как UTF-8. В MSVC подобное поведение насколько я понял пока недопилено. Но я теперь понял что MSVC лучше всегда юзать с флагом /utf-8

Похожие вопросы

Обсуждают сегодня

Ребята, всем привет. Подскажите, пожалуйста, можно ли как-то через бота понять, что этого бота добавили в группу\канал и выдали ему права администратора?
Artem Stormageddon
9
Это переведённый текст с английского. Я не говорю на русском, но могу использовать переводчик Телеграм. Приветствую! Я начинающий веб-разработчик и все еще учусь. В настояще...
𐩱𐩪𐩣𐩱𐩲𐩺𐩡
2
А не хотим ли мы развлечься? 😉 Но так чтобы с пользой для наших профессиональных навыков?? 👨‍🎓👩‍🎓 Предлагаю на октябрь запланировать тестовый запуск новой командной игры "Игр...
Andrii Kurdiumov
2
Привет всем! Почему этот код не срабатывает при добавлении или удалении пользователя из чата? bot.on('chat_member', async (ctx) => { console.log(ctx); }) bot.launch({allo...
Alexander
5
у кого сколько оперативы на базе данных ?
АДИЛЬБЕК
4
Через бот апи возможно получить ID стикерпака? Не ссылку.
Vexylon [АФК до 09.09]
5
Привет Хочу сделать аналог iCloud’а для своих проектов, чтобы пользовательская информация хранилась в облаке, была доступна во всех сервисах, её можно было подсасывать везде)...
Виталий
9
В тг можно спарсить всех кто пишет в группе? Если список участников скрыт
S
3
код Event::listen('cms.page.display', function (&$content, $slug, $page, $html) { if (is_object($content)) { dump($content); } else { dump($s...
Point 111
3
Ребят, а двух-факторку для плагина Users и для бэкенда октября кто-то прикручивал? Поделитесь опытом
Constantine Anikin
4
Карта сайта