OSDev http://osdev.su/ |
|
Кириллические символы http://osdev.su/viewtopic.php?f=6&t=1884 |
Страница 1 из 1 |
Автор: | grenders22 [ 12 мар 2018, 18:16 ] |
Заголовок сообщения: | Кириллические символы |
Добрый день! Как быть с отрисовкой русских "буковок"? И как вообще заставить понимать русские символы код си? В консольных приложениях под "винду" есть библиотека locale.h благодаря которых введенные символы понимались в коде. Я так понял главное чтобы они появились в ascii, но как это вообще осуществляется? И можно ли править эту таблицу? В общем понятия об ascii почти нет. |
Автор: | SII [ 12 мар 2018, 18:58 ] |
Заголовок сообщения: | Re: Кириллические символы |
Появлялись где? В Винде -- одно, в досе -- несколько другое, но, в общем, то же самое. А вот если в своей оси, то при использовании текстового видеорежима надо предварительно в знакогенератор загрузить нужный шрифт, поскольку то, что зашито, поддерживает лишь американскую кодировку. Если же в графическом режиме, то любые символы надо самому рисовать. Кроме того, играет роль вопрос кодировки. Если в программе используются символы в текстовом виде, а не в виде числовых констант, то в машинном коде они будут иметь кодировку, использовавшуюся для них в исходном файле, если только транслятор не перерабатывает символьные и строковые константы каким-нибудь хитрым образом. Для кириллицы в Винде это кодовая страница 1251. А вот что будет происходить, если исходный файл в юникоде, я понятия не имею -- символы-то тогда в общем случае не однобайтовые. Кстати, про кодировки вполне можно почитать на самой что ни на есть обычной вике. |
Автор: | pavia [ 12 мар 2018, 21:04 ] |
Заголовок сообщения: | Re: Кириллические символы |
Это просто как выучить Си++ за 21 день. ASCII (англ. American Standard Code for Information Interchange - американский стандартный код для обмена информацией) Для того чтобы кириллица попала в этот стандарт вам надо изобрести машину времени подменить инженера изобразившего этот стандарт и вписать кириллицу в лист со стандартом. Цитата: Как быть с отрисовкой русских "буковок"? И как вообще заставить понимать русские символы код си? Загружаешь шрифт в ОЗУ, далее рисуем. После того как вы включили VESA знакогенератор вам больше недоступен. Поэтому рисовать придётся ручками. https://wiki.osdev.org/Drawing_In_Prote ... awing_Text Шрифты можно взять из исходников KeyRus http://www.softpanorama.org/People/Gurtyak/#Famous%20KeyRus Или же экспортировать в векторный формате из виндоусе через GDI Код: BeginPath(dc); font:= CreateFont(100, 0, 0, 0, 700, 0, 0, 0, 0, 0, 0, 0, 0, 'Arial'); // select the font object into the off-screen DC SelectObject(dc, font); str:='абвгдеёжзийклмнопрстуфхцчшщъыьэюя'; LineTo(dc,10,10); TextOut(dc,0,0,PChar(Str),Length(str)); EndPath(dc); FlattenPath(dc); pp:=nil; ppp:=nil; size:=GetPath(dc,pp^,ppp^,0); GetMem(pp,SizeOf(TPoint)*size); size:=GetPath(dc,pp^,ppp^,size); А далее растеризовать как описано в https://developer.apple.com/fonts/TrueT ... Chap1.html |
Автор: | grenders22 [ 13 мар 2018, 10:58 ] |
Заголовок сообщения: | Re: Кириллические символы |
Спасибо за ответ. Чувствую себя глупцом)))) |
Автор: | grenders22 [ 16 мар 2018, 14:31 ] |
Заголовок сообщения: | Re: Кириллические символы |
pavia писал(а): Загружаешь шрифт в ОЗУ, далее рисуем. После того как вы включили VESA знакогенератор вам больше недоступен. Поэтому рисовать придётся ручками. https://wiki.osdev.org/Drawing_In_Prote ... awing_Text Приходится вернуться к этому вопросу. Надеюсь его кто нибудь увидит. С отрисовкой латиницы было просто. Сделал русский шрифт на латиницу, грубо говоря вводя B мы получаем Б, вводя C получаем В(рус). Далее мне не понятно, передавая массив символов я получаю код символа, но с кириллицей чтото не так. Сравнивая символы вот так Код: if(text[i] == 'Б') я никогда не получаю true. Как быть? |
Автор: | SII [ 16 мар 2018, 15:52 ] |
Заголовок сообщения: | Re: Кириллические символы |
Учить, что такое кодировки, и спуститься с уровня языка высокого уровня (Си) на уровень двоичных кодов, чтобы видеть, как символы реально представлены в той или иной кодировке. |
Автор: | pavia [ 16 мар 2018, 17:38 ] |
Заголовок сообщения: | Re: Кириллические символы |
Кодировка в листенге программы(в исходном файле) не совпадает с кодировкой строки. |
Автор: | Himik [ 16 мар 2018, 20:34 ] |
Заголовок сообщения: | Re: Кириллические символы |
В параметре GCC нужно указать тип кодировки исходного файла. Должен быть точно такой же, как в текстовом редакторе. -finput-charset=кодировка Список кодировок можно увидеть, запустив iconv --list (в Linux). Типа -finput-charset=WINDOWS-1251 -finput-charset=KOI8R -finput-charset=CP866 |
Страница 1 из 1 | Часовой пояс: UTC + 3 часа |
Powered by phpBB® Forum Software © phpBB Group http://www.phpbb.com/ |