| 
| 
 | Вопрос # 5 061/ вопрос открыт / | 
 |  Доброго времени суток, уважаемые эксперты!
 В Delphi 2010 некорректно отображается кириллица, если символы выводить программно функцией Chr(). Пробовал вроде и в анси, и в юникоде - одно и то же. Причём коды символов правильные.
 В Delphi 7 все ок.
 
 Подскажите где грабли?
 
 Заранее спасибо.
 Приложение:Переключить в обычный режим procedure TForm1.Button1Click(Sender: TObject);var b: byte; s: string; c: char;begin  memo1.Lines.Add(uinttostr(b)); // s := chr(b); memo1.Lines.Add(s); c := chr(b); memo1.Lines.Add(c);end; 
|  |   Вопрос задал: Muratov Radik (статус: Посетитель)Вопрос отправлен: 2 марта 2011, 16:02
 Состояние вопроса: открыт, ответов: 0.
 |  
 Мини-форум вопросаВсего сообщений: 14; последнее сообщение — 5 марта 2011, 11:30; участников в обсуждении: 4. 
|   | Вадим К (статус: Академик), 2 марта 2011, 16:05 [#1]:Проблема в понимании. Дело в том, что chr и ord не являются взаимообратными. В неюникодных делфи это просто совпадало. Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 2 марта 2011, 16:08 [#2]:Попробуй вместо chr() приведение типа s := Char(b);
 memo1.Lines.Add(s);
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Muratov Radik (статус: Посетитель), 2 марта 2011, 16:14 [#3]:Вадим К: допустим я не понимаю, объясните плиз? min@y™: не работает, то же самое выдает
 |  
|   | min@y™ (статус: Доктор наук), 2 марта 2011, 16:26 [#5]: Цитата (Muratov Radik): не работает, то же самое выдает  Давай колись, зачем тебе такая байда понадобилась?
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Вадим К (статус: Академик), 2 марта 2011, 16:29 [#6]:ord смотрит в некое множество, в данном случае множество символов и возвращает порядковый номер в этом множестве. Но так как множество символов совпадает с таблицей аски, то и получаем. chr преобразовывал по таблице аски.
 можете показать, что возвращает ord для какой то русской буквы в 2010 делфи?
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | Muratov Radik (статус: Посетитель), 2 марта 2011, 16:39 [#7]:min@y™: с ком-порта приходят названия на русском языке в виде байтов, где каждый байт - это аскии-код русской буквы, я их должен показать юзеру Вадим К: из указанного выше примера
 
 b := ord('ш');
 memo1.Lines.Add(uinttostr(b));в memo пишет правильный аскии-код(248).поэтому и странно, что chr(b) не работает
 |  
|   | Muratov Radik (статус: Посетитель), 2 марта 2011, 16:39 [#8]:min@y™: с ком-порта приходят названия на русском языке в виде байтов, где каждый байт - это аскии-код русской буквы, я их должен показать юзеру Вадим К: из указанного выше примера
 
 b := ord('ш');
 memo1.Lines.Add(uinttostr(b));в memo пишет правильный аскии-код(248).поэтому и странно, что chr(b) не работает
 |  
|   | Вадим К (статус: Академик), 2 марта 2011, 16:49 [#9]:потому что chr пытается подсмотреть в юникод таблице. Что бы я сделал. Я бы сделал свою таблицу
 array[0..255] of char
 где бы и вписал правильные символы.
 Это будет одинаково хорошо работать в разных делфи.
 Для непечатаемых символов можно ввести пробел или точку.
 Галочка "подтверждения прочтения" - вселенское зло. |  
|   | min@y™ (статус: Доктор наук), 2 марта 2011, 16:53 [#10]:Ну значит надо перекодировать каждый байт в Unicode да и всё. В Delphi2010 должны быть функции на эту тему, но я их не знаю, у меня нету этой версии delphi. Однако, можно за 10 минут наваять свою функцию кодирования и не париться. Коды букв:
 'A' = $0410,
 'Я' = $042F,
 'а' = $0430,
 'я' = $044F.
 Проще набросать константный массив, в котором индекс - код буквы в ASCII, а элементы - коды букв в юникоде. И всего делов.
 Делаю лабы и курсачи по Delphi и Turbo Pascal. За ПИВО! Пишите в личку, а лучше в аську. А ещё лучше - звоните в скайп! |  
|   | Muratov Radik (статус: Посетитель), 2 марта 2011, 16:57 [#11]:Да, свой перекодировщик будет проще и инвариантен к версии дельфи. Просто хотел понять, так сказать, природу явления.
 Спасибо !
 |  
|   | bugmenot (статус: 3-ий класс), 5 марта 2011, 05:32 [#12]:вообще-то ASCII это #0..#127 не путайте выше возникает вопрос о кодировке символов которые приходят в виде байт, ага. ну и со всеми вытекающими последствиями.
 
 а также, внезапно, 'А'..'Я','а'..'я' не описывает весь русский алфавит
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  
|   | bugmenot (статус: 3-ий класс), 5 марта 2011, 11:30 [#14]:> bugmenot: реплика ниочем ... но раскрывает природу явления во втором предложении.
 "ни о чём" пишется раздельно, кстати
 виконання програми розпочинається з того самого мiсця, де призупинилося.
 
 |  Чтобы оставлять сообщения в мини-форумах, Вы должны авторизироваться на сайте. |