Код символа

Вопросы программирования и использования среды Lazarus.

Модератор: Модераторы

Код символа

Сообщение bogdan » 01.06.2016 20:06:59

Здравствуйте! Как в Lazarus для кириллицы вернуть ASCII код символа, например буква "Т" по таблице 210, а в лазарусе 208 и 162?
Код: Выделить всё
lcName1 := 'Т';
showmessage(lcName1 + ' ' +IntToStr(Ord(lcName1[1])) + ' ' + IntToStr(Ord(lcName1[2])));
bogdan
новенький
 
Сообщения: 40
Зарегистрирован: 20.05.2015 21:32:49

Re: Код символа

Сообщение pupsik » 01.06.2016 22:16:31

а вы уверены что в данном варианте у вас ASCII?
По идее у вас ютф8...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Код символа

Сообщение resident » 01.06.2016 23:22:42

bogdan
Я б делал вручную для каждой буквы алфавита.
Код: Выделить всё
program Project1;

uses
  Classes, SysUtils, LazUtf8, Windows, Messages, Dialogs;

var
  p: PChar;

function Utf8CharToASCII(const p: PChar): integer;
  begin
    if p = 'Т' then Result := 210; // Т
    // и т.д. весь алфавит
  end;

begin
  p := 'Т';
  WriteLn(IntToStr(Utf8CharToASCII(p)));
  Readln;
end.     


Добавлено спустя 8 минут 33 секунды:
bogdan писал(а):а в лазарусе 208 и 162

Лазарус работает на Юникоде
В двоичном виде будут:
11010000 и 10100010
Символ с кодом до 2048 кодируется 2-мя байтами.
Берем от первого последние 5 бит, а от второго последние 6 бит и получаем:
10000100010 = 1058 = $0422
Кириллица в Юникоде
Для "Т" Юникод = $0422 (= 1058).
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Код символа

Сообщение MysticCoder » 02.06.2016 00:12:34

Не совсем понятен вопрос. Следует помнить, что в исходном pas строковые константы которые ты набираешь сохраняются в utf8. Надо четко понимать из какой кодировки и куда ты хочешь перевести. Системная кодировка называется ANSI, если у тебя русская винда, то ANSI = cp1251, кириллица то бишь, если линукс к примеру, то utf8 скорее всего. Есть 2 функции AnsiToUtf8 и Utf8ToAnsi. Ими и пользуйся)
MysticCoder
постоялец
 
Сообщения: 154
Зарегистрирован: 14.09.2013 00:20:28

Re: Код символа

Сообщение resident » 02.06.2016 00:21:06

Кто говорил про строки, про константы, про системные кодировки? Надо четко читать условие: есть символ - нужен код ASCII. Всё.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Код символа

Сообщение pupsik » 02.06.2016 00:22:04

я намекал на:
Код: Выделить всё
uses
  LConvEncoding;
......
lcName1 := UTF8ToCP1251('Т');
showmessage(lcName1 + ' ' +IntToStr(Ord(lcName1[1])) + ' ' + IntToStr(Ord(lcName1[2])));


п.с.
Код: Выделить всё
if p = 'Т' then Result := 210; // Т
Это вы ему предлагаете всю таблицу "запихнуть"? А надо ли?

AnsiToUtf8 и Utf8ToAnsi
это дело то работает... то нет...
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Код символа

Сообщение resident » 02.06.2016 00:35:20

Подтверждаю, работает UTF8ToCP1251
program Project1;

uses
Classes, SysUtils, LazUtf8, Windows, Messages, Dialogs,LConvEncoding;

var
p: PChar;

begin
p := 'Т';
WriteLn(IntToStr(Integer(UTF8ToCP1251(p)[1])));
Readln;
end.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Код символа

Сообщение PapaNT » 03.06.2016 16:29:12

Пример моего любимого кода :)
Код: Выделить всё
Function GetCode(c : char) : byte;
Var
  a : byte absolute c;
begin
  GetCode := a;
end;
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Код символа

Сообщение resident » 04.06.2016 09:43:24

Шайтанама :mrgreen:
Только у меня не получается прикрутить этот код к кириллице.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Код символа

Сообщение PapaNT » 04.06.2016 13:35:43

А какая кодовая таблица? 866 или 1251?
PapaNT
постоялец
 
Сообщения: 167
Зарегистрирован: 11.09.2009 12:06:46
Откуда: Москва

Re: Код символа

Сообщение pupsik » 04.06.2016 14:40:18

PapaNT в редакторе кода, без "принуждения" ютф8....
pupsik
энтузиаст
 
Сообщения: 1154
Зарегистрирован: 20.08.2014 16:20:13

Re: Код символа

Сообщение Лекс Айрин » 04.06.2016 15:32:49

интересно... зачем тогда нужно событие OnUTF8KeyPress

Добавлено спустя 5 минут 15 секунд:
причем, судя по всему, различие между ними в величине "символа".
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Код символа

Сообщение resident » 04.06.2016 17:35:46

Лекс Айрин писал(а):интересно...

Как набирать символы с помощью кнопки Alt
А как же твой редактор будет обрабатывать коды, большие 7(8) бит?
К примеру, нажал клавишу Alt и набираешь комбинацию 777 на цифровой клавиатуре. Получается символ ○.
Последний раз редактировалось resident 04.06.2016 17:54:52, всего редактировалось 1 раз.
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

Re: Код символа

Сообщение Лекс Айрин » 04.06.2016 17:45:43

resident писал(а):А как же твой редактор будет обрабатывать коды, большие 7(8) бит?


Лично у меня он набирает их даже без дополнительного кода. И не забывай, что скан-код символа и символ это разные сущности.
Аватара пользователя
Лекс Айрин
долгожитель
 
Сообщения: 5723
Зарегистрирован: 19.02.2013 16:54:51
Откуда: Волгоград

Re: Код символа

Сообщение resident » 04.06.2016 17:58:12

Лекс Айрин писал(а):Лично у меня он набирает их даже без дополнительного кода

Ок. Тогда даже не знаю зачем этот обработчик.

Добавлено спустя 5 минут 30 секунд:
А если его использовать, чтобы он на лету заменял, например, кириллицу на транслитерацию?
resident
энтузиаст
 
Сообщения: 605
Зарегистрирован: 13.03.2013 16:58:51

След.

Вернуться в Lazarus

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

Сейчас этот форум просматривают: Google [Bot] и гости: 228

Рейтинг@Mail.ru