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 - американский стандартный код для обмена информацией)
Для того чтобы кириллица попала в этот стандарт вам надо изобрести машину времени подменить инженера изобразившего этот стандарт и вписать кириллицу в лист со стандартом.
:lol:

Цитата:
Как быть с отрисовкой русских "буковок"? И как вообще заставить понимать русские символы код си?

Загружаешь шрифт в ОЗУ, далее рисуем.

После того как вы включили 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/