14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
||||||
1 | ||||||
Получить ASCII код русских букв17.10.2016, 14:36. Показов 23010. Ответов 17
Метки нет (Все метки)
Нужно получить код аски кода русского символа. Казалось бы, ничего сложного, но.
Первая проблема заключается в том, что у меня не очень корректно работает ввод и вывод русских символов в консоли. Когда я ввожу что-нибудь русское в консоль - отображается и выводится нормально, но если я пропишу русские символы в самом коде в строковой переменной, то выводит кракозябры. Вот код:
кракозябры а потом: 10 32 10 0 10 0 10 0 10 0 -48 -48 -48 -48 -48 -48 -48 -48 -48 -48 А шаг как известно у ascii "абвгд" должен быть единичным. В чем тут дело?
0
|
17.10.2016, 14:36 | |
Ответы с готовыми решениями:
17
Номера русских букв в ASCII Консольный вывод расширенной ASCII и русских букв ASCII игра из русских символов Из русских букв в английские |
13 / 13 / 9
Регистрация: 24.09.2016
Сообщений: 74
|
|
17.10.2016, 14:52 | 2 |
Насколько знаю, нужно поменять шрифт в консоле.
Выбрать шрифт Lucida Console или Consolas.
0
|
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
|
17.10.2016, 14:53 [ТС] | 3 |
Конечно, я уже поменял на Lucida
0
|
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
|
17.10.2016, 14:56 [ТС] | 5 |
Qt Creator
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
||||||
17.10.2016, 14:57 | 6 | |||||
Надо приводить к беззнаковому char:
0
|
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
||||||
17.10.2016, 15:03 [ТС] | 10 | |||||
Теперь код такой:
кракозябры 208 176 208 177 208 178 208 179 208 180 откуда здесь 208?
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
17.10.2016, 15:07 | 11 |
Я же тебе сказал: в Qt юникод, а ты мыслишь древними понятиями. Твоя строка будет в utf-8. Используй QString и перекодируй, как я написал выше.
0
|
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
||||||
17.10.2016, 15:18 [ТС] | 13 | |||||
Не понимаю я тонкостей тут. toStdString, toStdU1String, toLocal16Bit() и пр. Разные варианты пробовать вместо sss.toLocal8Bit();?
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
||||||
17.10.2016, 15:23 | 14 | |||||
Сообщение было отмечено Blitzor DDD как решение
Решение
0
|
14 / 14 / 1
Регистрация: 17.08.2015
Сообщений: 460
|
||||||
17.10.2016, 15:53 [ТС] | 16 | |||||
Да, вот этот вариант работает как надо
Вот здесь QByteArray a = sss.toLocal8Bit(); мы избегаем всякой путанницы с различными кодировками и просто последовательность символов конвертируем в последовательность байтов и дальше с этим уже можно удобно работать? То есть, QByteArray - это некий универсальный класс для работы с символами, наподобие QVariant?
0
|
7791 / 6558 / 2984
Регистрация: 14.04.2014
Сообщений: 28,667
|
|
17.10.2016, 15:57 | 17 |
Все нормальные программы используют юникод, но оставлена возможность перекодировать в древний формат. При этом байты сохраняются в QByteArray, это примерно как вектор, только с дополнительными функциями. А само перекодирование зависит от настроек системы -русская Windows будет в 1251 перекодировать.
0
|
18840 / 9839 / 2408
Регистрация: 30.01.2014
Сообщений: 17,280
|
|
18.10.2016, 09:42 | 18 |
Тут теория простая как 2 копейки.
Нужно понимать в какой кодировке у тебя сохранен сам файл исходника. В этой же кодировке у тебя будут строковые литералы (но не широкие, про них чуть по-другому) в коде. Если у тебя файл в UTF-8 сохранен, то и символы литерала тоже будут в UTF-8. А дальше открываешь любой источник информации по UTF-8 и видишь, что символы там кодируются несколькими байтами (до 6), а не одним (для русских символов - это будет 2 байта). Т.е. привычной индексации - один char - один символ ты тут в общем случае не получишь. QByteArray - это обычная последовательность байт, как массив. Про символы он вообще ничего не знает. Вся суть кода выше вот в чем: * Конструктор QString конвертирует строку, переданную ему в параметре, из UTF-8 в UTF-16. UTF-16 - это внутренее представление символов в QString. * UTF-16 - можно преобразовать в любую 8-битную кодировку, если в ней есть коды для необходимых символов. В данном случае toLocal8Bit() получает кодировку текущей локали. В твоем случае, на русской Windows, это будет кодировка cp1251.
0
|
18.10.2016, 09:42 | |
18.10.2016, 09:42 | |
Помогаю со студенческими работами здесь
18
Ввод русских букв Вывод русских букв в консоли Кодировка русских букв в MacOS Запись русских букв в массив! Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |