Друзья! Вот эта кодировка. Ни одной кириллической буквы. Так и нужно для задания.
Кодировку выбрать нетрудно. Сложнее выбрать шрифт с такими символами. Но я его нашёл, он у меня "Corel New", набор символов "Западные".
В AkelPad создаю файл, открываю в кодировке ISO 8859-1, устанавливаю шрифт "Corel New", "Западный". Перевожу клавиатуру на русский язык, печатаю и, поскольку русских букв в этой кодировке и в этом шрифте нет, будет печататься, что задано- символы с 128 по 255. Не все 128, клавиш-то меньше. Но кириллица точно не будет печататься.
...Кириллица и печатается. Никакого эффекта от перенастроек. Печатаются кирилические буквы так, как если бы настройки были:
кодировка 1251 (ANSI-кириллица)
шрифт "Corel New", "Кириллический"
ЧЯДНТ? Спасибо, кто откликнется. AkelPad 4.9.2
Как напечатать символы c 128 по 255 кодировки ISO 8859-1?
- Author
- Message
-
Offline
- Posts: 9
- Joined: Sun Apr 26, 2015 9:30 am
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
ЧЯДНТ?
Почитать вам про Юникод. Почитайте Хабровскую статью хотя бы.Перевожу клавиатуру на русский язык, печатаю
Вы вводите code-point-ы кириллицы, они и отображаются. Кодировка - способ представления code-point-ов в байтах, когда их нужно сохранить вне среды обработки(в файле, или переслать в сеть). Считайте что внутри AP оперирует чистыми code-point-ами. Кодировка которую выставили будет использована только при сохранении.
Самый простой способ ввести те символы которые хотите - не поверите - скопировать их со статьи вики на которую ссылаетесь(если конечно там не на мухлевали).
Также можете воспользоваться плагином HexSel:
1. В редакторе вводите все коды(из кодировки 8859-1) которые вас интересуют, например x80x81x82x83x84x85 и т.да
2. Открываете панель плагина, открываете настройки
3. Direction Hex->Text, Single Byte - ISO-8859-1
4. Enclose, prefix: x, suffix оставляете пустым (как удобнее. это под пример выше)
5. Radix: hexadecimal
В окне редактирования выделяете введенные коды, и в окне плагина лицезреете искомые буквы. Копируете в окно редактирования, и сохраняете как хотите.
Вероятно сработает, но может и накосячить. Понять Юникод надо. Че за задание я хз, но явно что-то чего делать я бы не рекомендовал в реальной практике.
-
Offline
- Posts: 9
- Joined: Sun Apr 26, 2015 9:30 am
До определённого момента всё проще. Итак, имеем оконную процедуру AkelPad, которая периодически вызывается. При нажатии на клавишу она вызывается и параметром wParam к ней попадает ASCII-код введённого символа. Упрощённый код на плюсах:
Так, вот если мы включим английский регистр и будем нажимать на клавишу "s", то будем видеть в окне консоли "0x73", а если переключим на русский регистр, то при нажатии на "s" (теперь на "ы", поучается, ибо "s" и "ы" находятся на одной клавише) будем выдеть "0xFB"
Вот теперь оконная процедура (читай: программа) вольна сделать с полученым символом что угодно и может как угодно его интерпретировать.
Всё это все, естессно, знают. Это я просто напоминаю.
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
А теперь пошла сложность и непонятности из-за которой, собсно и был задан вопрос. Есть у меня предположения, что программа сейчас должна обработать этот самый символ "0xFB" в соответствии со своими настройками. А именно, заглянуть где там у ней спрятан шифр ("Corel New", "Западный"), найти в нём "0xFB" и отобразить этот символ (английское "u" с тильдой наверху) по нажатию клавиши
Но она так не делает. Впрочем, уверен, что делает, просто я не до конца разобрался с настройками, о чём и спрашиваю.
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
Что же касается юникода- знание чего бы то ни было никода не бывает лишним. В данном же вопросе не вижу, где ему можно найти применение, если не ставить себе целью щегольнуть им перед собеседником. Чего к вам не относится, естессно. За плагин спасибо. Вопрос открыт.
Code: Select all
LRESULT CALLBACK WndProc (HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
if (uMsg==WM_CHAR)
{
printf ("0X%x ", wParam);
}
Вот теперь оконная процедура (читай: программа) вольна сделать с полученым символом что угодно и может как угодно его интерпретировать.
Всё это все, естессно, знают. Это я просто напоминаю.
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
А теперь пошла сложность и непонятности из-за которой, собсно и был задан вопрос. Есть у меня предположения, что программа сейчас должна обработать этот самый символ "0xFB" в соответствии со своими настройками. А именно, заглянуть где там у ней спрятан шифр ("Corel New", "Западный"), найти в нём "0xFB" и отобразить этот символ (английское "u" с тильдой наверху) по нажатию клавиши
Но она так не делает. Впрочем, уверен, что делает, просто я не до конца разобрался с настройками, о чём и спрашиваю.
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
+++++++++++++++++++++++++++++++++++++++++=
Что же касается юникода- знание чего бы то ни было никода не бывает лишним. В данном же вопросе не вижу, где ему можно найти применение, если не ставить себе целью щегольнуть им перед собеседником. Чего к вам не относится, естессно. За плагин спасибо. Вопрос открыт.
-
Offline
- Site Admin
- Posts: 6311
- Joined: Thu Jul 06, 2006 7:20 am
икс
В AkelPad'е вывод текста идёт в Unicode, поэтому набор знаков в диалоге шрифтов не играет роли. Чтобы играл, перекомпилируйте программу с ANSI выводом.
Закомментируйте строки, как показано ниже, в файле AkelEdit.c:
В AkelPad'е вывод текста идёт в Unicode, поэтому набор знаков в диалоге шрифтов не играет роли. Чтобы играл, перекомпилируйте программу с ANSI выводом.
Закомментируйте строки, как показано ниже, в файле AkelEdit.c:
Code: Select all
...
else nLeftOffset=0;
//if (!(to->dwPrintFlags & AEPRN_ANSI))
//{
// TextOutW(to->hDC, rcTextOut.left + nLeftOffset, rcTextOut.top, wpText + i, nCharLen);
//}
//else
{
nBytes=WideCharToMultiByte(CP_ACP, 0, wpText + i, 1, szChar, sizeof(szChar), NULL, NULL);
TextOutA(to->hDC, rcTextOut.left + nLeftOffset, rcTextOut.top, szChar, nBytes);
}
rcTextOut.left+=AE_GetCharWidth(ae, wpText + i, 0);
i+=nCharLen - 1;
}
}
}
else
{
//if (!(to->dwPrintFlags & AEPRN_ANSI))
//{
// ExtTextOutW(to->hDC, rcTextOut.left, rcTextOut.top, dwTextOutFlags, &rcTextOut, wpText, nTextLen, NULL);
//}
//else
{
nBytes=WideCharToMultiByte(CP_ACP, 0, wpText, nTextLen, NULL, 0, NULL, NULL);
...
-
Offline
- Posts: 2247
- Joined: Tue Aug 07, 2007 2:03 pm
- Location: Vinnitsa, Ukraine
DV, юникодные окна, всё приходит в wchar_t, в UTF-16, а та опция используется только в *A функция/сообщениях, и там где явно или не явно используется CP_ACP. Да и это не помогло бы, ибо преобразование W->A просто заменило входящие кириллические code-point-ы в заглушки для code-point которых нету в целевой кодировке.