QChar хранит отрицательный код Latin1 для знака умножения '×'

Я хочу получить код Latin1 для знака умножения ×, но когда я проверяю значение внутри QChar она имеет -41'×',

Мой код:

QString data = "×";
QChar m = data.at(0);
unsigned short ascii = (unsigned short)m.toLatin1();

Когда я отлаживаю, во второй строке я вижу QChar значение -41'×',

Я изменил код:

unsigned int ascii = c.unicode();

Но я скорее получаю значение 215 и ожидаю 158.

2 ответа

Знак умножения × это не знак ascii, как вы можете видеть при проверке man ascii если вы в системе Unix.

Каково его значение, зависит от кодировки, см. Здесь для его представления UTF. Например, в UTF-8 он имеет значение 0xC397 которые два байта. Как упомянуто на странице Unicode, на которую я ссылаюсь 215, это десятичное значение для представления этого символа в кодировке UTF-16, что c.unicode() возвращается. Я не знаю, почему вы ожидаете 158.

Хотя есть знак умножения ascii, который *,

Если вы проверите таблицу кодов Latin1, очевидно, что × действительно кодируется как 215 или -41. Qt дает вам правильный результат.

Ваши ошибки:

  1. Предполагая, что Latin1 эквивалентно ASCII. Latin1 просто содержит ASCII, но является надмножеством: он определяет в 2 раза больше кодов, чем ASCII.

  2. При условии, что × представлен в ASCII. Это не.

Понятия не имею, откуда у вас идея, что кодируется Latin1 × должно быть 158. Конечно, это не из таблицы кода Latin1! Кстати, кодировки Latin1 и UTF-8 × идентичны

Другие вопросы по тегам