Помогите, пожалуйста, решить проблему с 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 ответов

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

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

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

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

Добрый вечер, Пока не совсем понимаю как наладить общение между телеграм ботом и ПО для работы с сим боксом. По самому боту так понял: - Нужен некий баланс, который можно поп...
Magic
6
сделал сайт, прикрутил в боте сайт, и виджет логина. как автоматически логинить пользователя в аккаунт(телеграм), при входе с бота?
Александра Чернивецкая
5
Объясните, пожалуйста, почему компилятор ругается на использование в условии неинициализированной переменной: int x; Task.Run(async () => { x = await somefunc(); }).Wait...
Александр
5
Ребят, подскажите, пожалуйста, почему в префиксе к ассетам, которые генерируются через фильтр | theme в шаблоне, стал вдруг появляться index.php? Вот так выглядит ссылка на а...
Виталий
1
Всем привет. Ребята, подскажите, пожалуйста. у ботов есть ограничение на отправку сообщений - 30 сообщений в секунду, эти ограничения накладываются на все сообщения? или на со...
Artem Stormageddon
4
Блин, ребята, сори за тупые вопросы. А можно ли как-то открыть вебапку по нажатию на кнопку в меню(которое появляется слева, команды)?
Artem Stormageddon
3
а плаксы из-под питона умеют только в комфортных условиях что-то выдавить из себя?)
Lencore
9
Но, может, есть уже проверенная? Наши требования такие: 1. Сообщения должны приходить из Инста в CRM оду 2. Должна быть возможность подключить несколько экаунтов Инстаграм. Р...
Alexander Sharoiko MSE / Александр Шаройко
13
Коллеги, может знает кто, можно ли цвет бейджа счётчика в BackendMenu менять без бубнов?
Alex Blaze
3
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
Карта сайта