Создание файла с кодировкой UTF-8 C++
Хочу записать переменную типа char в файл с кодировкой UTF-8, в переменной хранятся символы кириллицы, в этом и есть вся проблема. Если я правильно понимаю, то эта переменная в кодировке ANSI, может как-то можно перевести саму переменную в UTF-8? Это бы тоже решило проблему. У меня получилось создать "UTF-8 со спецификацией", но это не подходит. Работаю в Qt.
Ответы (1 шт):
С кодировками желательно хорошенько разобраться. Есть нюансы, так, по умолчанию:
- Qt 5 сохраняет текстовые файлы в локальной кодировке. И, соответственно, при считывании считается, что используется локальная кодировка.
- Qt 6 сохраняет текстовые файлы в кодировке utf-8. И, соответственно, при считывании текстовые файлы должны быть в кодировке utf-8.
Раньше в книжках советовали сохранять исходные файлы в кодировке utf-8, а в коде использовать функцию QObject::trUtf8(). В Qt 6 больше этой функции нету, а исходные файлы обязаны быть сохранеными в кодировке utf-8. Также есть функция QString::fromUtf8().
Также важно понимать, что в классах QChar И QString используется кодировка utf-16. Qt сам, под капотом, преобразовывает тексты в данную кодировку и обратно.
Если же нужно получить набор байтов в кодировке utf-8, есть функция QString::toUtf8():
QString myString("foo/bar");
QByteArray inUtf8 = myString.toUtf8();
const char *data = inUtf8.constData();
И как создавать сам текстовый файл: unicode - Create UTF-8 file in Qt - Stack Overflow. Актуально для Qt 5, в Qt 6 нет необходимости дополнительно устанавливать кодировку.