OSDev

для всех
Текущее время: 28 мар 2024, 15:03

Часовой пояс: UTC + 3 часа




Начать новую тему Ответить на тему  [ Сообщений: 8 ] 
Автор Сообщение
 Заголовок сообщения: Кириллические символы
СообщениеДобавлено: 12 мар 2018, 18:16 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
Добрый день! Как быть с отрисовкой русских "буковок"? И как вообще заставить понимать русские символы код си?

В консольных приложениях под "винду" есть библиотека locale.h благодаря которых введенные символы понимались в коде. Я так понял главное чтобы они появились в ascii, но как это вообще осуществляется? И можно ли править эту таблицу? В общем понятия об ascii почти нет.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 12 мар 2018, 18:58 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Появлялись где? В Винде -- одно, в досе -- несколько другое, но, в общем, то же самое. А вот если в своей оси, то при использовании текстового видеорежима надо предварительно в знакогенератор загрузить нужный шрифт, поскольку то, что зашито, поддерживает лишь американскую кодировку. Если же в графическом режиме, то любые символы надо самому рисовать.

Кроме того, играет роль вопрос кодировки. Если в программе используются символы в текстовом виде, а не в виде числовых констант, то в машинном коде они будут иметь кодировку, использовавшуюся для них в исходном файле, если только транслятор не перерабатывает символьные и строковые константы каким-нибудь хитрым образом. Для кириллицы в Винде это кодовая страница 1251. А вот что будет происходить, если исходный файл в юникоде, я понятия не имею -- символы-то тогда в общем случае не однобайтовые.

Кстати, про кодировки вполне можно почитать на самой что ни на есть обычной вике.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 12 мар 2018, 21:04 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Это просто как выучить Си++ за 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


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 13 мар 2018, 10:58 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
Спасибо за ответ. Чувствую себя глупцом))))


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 16 мар 2018, 14:31 

Зарегистрирован: 04 мар 2018, 21:34
Сообщения: 55
pavia писал(а):
Загружаешь шрифт в ОЗУ, далее рисуем.

После того как вы включили VESA знакогенератор вам больше недоступен. Поэтому рисовать придётся ручками.
https://wiki.osdev.org/Drawing_In_Prote ... awing_Text


Приходится вернуться к этому вопросу. Надеюсь его кто нибудь увидит.
С отрисовкой латиницы было просто. Сделал русский шрифт на латиницу, грубо говоря вводя B мы получаем Б, вводя C получаем В(рус). Далее мне не понятно, передавая массив символов я получаю код символа, но с кириллицей чтото не так. Сравнивая символы вот так
Код:
if(text[i] == 'Б')

я никогда не получаю true. Как быть?


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 16 мар 2018, 15:52 

Зарегистрирован: 28 окт 2007, 18:33
Сообщения: 1418
Учить, что такое кодировки, и спуститься с уровня языка высокого уровня (Си) на уровень двоичных кодов, чтобы видеть, как символы реально представлены в той или иной кодировке.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 16 мар 2018, 17:38 
Аватара пользователя

Зарегистрирован: 16 май 2007, 23:46
Сообщения: 1126
Кодировка в листенге программы(в исходном файле) не совпадает с кодировкой строки.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Кириллические символы
СообщениеДобавлено: 16 мар 2018, 20:34 

Зарегистрирован: 21 сен 2007, 17:24
Сообщения: 1088
Откуда: Балаково
В параметре GCC нужно указать тип кодировки исходного файла. Должен быть точно такой же, как в текстовом редакторе.
-finput-charset=кодировка
Список кодировок можно увидеть, запустив iconv --list (в Linux).
Типа
-finput-charset=WINDOWS-1251
-finput-charset=KOI8R
-finput-charset=CP866


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 8 ] 

Часовой пояс: UTC + 3 часа


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Создано на основе phpBB® Forum Software © phpBB Group
Русская поддержка phpBB