Задать вопрос
@Festelo

C++QT5: UTF-8, QString, QByteArray, *char и русские символы. Как изменить элемент в массиве *char?

Есть QString в UTF-8, мне нужно получить из него массив *char, делаю так:
QString word = "Слово";
QByteArray ar = word.toUtf8();
char* FirstArray = ar.data();
FirstArray[0] = 'X';
QString word1 = QString::fromUtf8(ar.data());

И word1 становится равен X�лово, а не Xлово. Как исправить?
  • Вопрос задан
  • 1821 просмотр
Подписаться 1 Оценить Комментировать
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
В кодировке UTF-8 один символ — это от одного до четырёх байт. Смиритесь, и если хотите менять русскую букву (2 байта) на английскую (1 байт), лучше работать в кодировке UTF-16.
word1 = word;
word1[0] = 'X';

или
word1 = QString::fromUtf8(ar.data());
word1[0] = 'X';

А если нет возможности — то разбирать UTF-8, разумеется.

Вообще многобайтовые кодировки неудобны для подобных операций.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

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