3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
1 | |
Вывод кириллических символов по их коду в Linux13.04.2021, 13:02. Показов 11117. Ответов 12
Добрый день!
Стоит следующая задача: рандомно генерировать коды кириллических букв (заглавных и строчных), а дальше выводить код буквы и саму букву. И всё это должно работать на Linux`е. Хотел работать через коды ASCII, но после первых 128 символов идёт только "�". Помню, что для винды в кодировке 1251 кириллица располагается в кодах со 192 по 255 включительно. Для DOS коды другие. А вот какие коды для семейства систем Linux(дистрибутив Debian)? Помимо этого на просторах рунета вычитал, что обычный char кодируется 1 байтом, когда кириллица требует целых два, поэтому она не вмещается в обычный char.
0
|
13.04.2021, 13:02 | |
Ответы с готовыми решениями:
12
Не задаются множества, состоящие из кириллических символов (Linux) Корректный вывод кириллических символов Вывод кириллических символов в Bitmap Вывод кириллических символов из строки |
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.04.2021, 14:41 | 2 |
0
|
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
13.04.2021, 15:03 [ТС] | 3 |
hoggy, уже. Но не очень понимаю, как рандомно генерировать символы в юникоде.
0
|
8739 / 4317 / 960
Регистрация: 15.11.2014
Сообщений: 9,760
|
|
13.04.2021, 15:35 | 4 |
в интернетах можно скачать уже готовую таблицу.
а потом просто рандомно по выбирать из этой таблицы любой произвольный код.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
|
||||||
13.04.2021, 15:42 | 5 | |||||
Сообщение было отмечено ivan_proger как решение
Решение
Забудьте этот атавизм
Если хотите работать с константными строками, без особой обработки, читайте про utf-8, но для вашей задачи лучше utf-32, он же wchar_t:
1
|
3 / 3 / 2
Регистрация: 07.08.2018
Сообщений: 84
|
|
13.04.2021, 21:53 [ТС] | 6 |
COKPOWEHEU, спасибо! Не могу пока на практике "потыкать", доберусь до компа - детально изучу. Но вот пока такой вопрос. Можно ли вместо L'a' использовать static_cast<wchar_t>(???)? И если да, то какое целочисленное значение (именно его мне надо рандомно генерировать) подставлять?
0
|
Невнимательный
|
||||||
13.04.2021, 23:28 | 7 | |||||
Ввод-вывод с консоли идёт в utf-8
работать можно только как с байтами... в cygwin например если запусккаю
zzz@zz ~ русская буква 2 байта остальное по одному Чтобы работать с wchar_t нужно сначала преобразовывать ввод в юникод потом обратно для вывода ... но в wchar_t не все символы помещаются... которые помещаются в utf-8 3-х байтный юникод вроде кодируется в 4-х байтные utf-8 но 3-x вроде нет типов )) только как обрубки от long Добавлено через 11 минут Вроде в Perl utf8.h юзается Добавлено через 28 минут Оффициально юникод вроде где-то тут поддерживается github.com/unicode-org/icu/releases/tag/release-69-1 но как-то многовато cpp файлов )
0
|
5982 / 1991 / 323
Регистрация: 10.12.2013
Сообщений: 6,860
|
|
14.04.2021, 10:52 | 8 |
када америке придёт кирдык, мы сделаем так, чтобы наша русская буква занимала наш русский один байт,
а все остальные пусть мучаются с двумя и тремя. вот так. Добавлено через 1 минуту руникод будет называться.
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
|
|||||||||||
14.04.2021, 10:55 | 9 | ||||||||||
Сообщение было отмечено ivan_proger как решение
Решение
Понятия не имею. Я в этих плюсовых извращениях не разбираюсь.
wchar_t также как и char - просто число. Зачем его еще к чему-то приводить? Впрочем, можете вывести как uint32_t и посмотреть диапазон букв
Так я с этого и начал: если нужно только хранение, без особой обработки, можно обойтись utf-8. Но если, как ТСу, нужно коды символов преобразовывать, имеет смысл взять utf-32 (wchar_t). То, во что оно там переводится при вводе-выводе это забота операционной системы и стандартной библиотеки.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
14.04.2021, 14:33 | 10 |
Нельзя. Потому что wchar_t - это тоже число, а не объект символа, потому ему присвоится именно 'a' в той 8-битной кодировке, в которой был сохранён исходный код программы. L'a' гарантирует, что символ будет скомпилирован не в той кодировке, в который исходный код, а именно в utf-16 .
1
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
|
||||||
14.04.2021, 15:07 | 11 | |||||
Только не в utf-16, а в utf-32, естественно. Для utf-16 скорее модификатор u:
Код
$ gcc main.c $ ./a.out wchar[4]: 16 char_u[4]: 8 utf-8: 4 ru_wchar[4]: 16 ru_char_u[4]: 8 ru_utf-8: 7 UPD: Хм, для utf-32 оказывается не только L"", но и U"" работает. Надо бы проверить что у них с переносимостью. Добавлено через 21 минуту UPD2: Да, в стандарте прописано что L - wchar_t, без указания размера, зато со спецификатором для printf u - char16_t, зато без спецификатора для printf U - char32_t, тоже без спецификатора.
0
|
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
|
|
14.04.2021, 17:27 | 12 |
В частном случае компилятора мелкомягких - utf-16LE (https://docs.microsoft.com/ru-... w=msvc-160). В случае GCC таки utf-32
0
|
3881 / 2479 / 418
Регистрация: 09.09.2017
Сообщений: 10,869
|
|
14.04.2021, 18:16 | 13 |
В данном случае все-таки utf-32.
Ну и ориентироваться на мелкомягкий "стандарт" в любом случае сомнительная идея. Взять хотя бы их аллергию на стандартные функции вроде printf.
0
|
14.04.2021, 18:16 | |
14.04.2021, 18:16 | |
Помогаю со студенческими работами здесь
13
Вывод кириллических символов на tft ili9341 spi, stm32f103 вывод символов по коду (программа на с) Поддержка кириллических символов Краозябры кириллических символов в БД Некоректное считывание кириллических символов Отображение кириллических символов из файла Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |