Форум сайта python.su
Здравствуйте, столкнулся с проблемой. Нужна работа с символами таблицы ascii. Использую Python 2.7.5 судя по документации есть функция которая возвращает символы таблицы ascii chr.
chr(i)¶
Return a string of one character whose ASCII code is the integer i. For example, chr(97) returns the string ‘a’. This is the inverse of ord(). The argument must be in the range , inclusive; ValueError will be raised if i is outside that range. See also unichr().
Однако код
for i in xrange(256): print i, '\t', chr(i)
Отредактировано med_phisiker (Сен. 15, 2013 11:59:17)
Офлайн
med_phisikerНет, тут питон выдает байты 0..255, это ваша консоль уже воспринимает их как cp1251.
дает таблицу символов кодировки cp1251!
Офлайн
спасибо за совет но у меня на pythone терминал написан для обмена с микроконтроллером по com порту, а микроконтроллер только ascii понимает а python почему то ему только cp1251 шлет ) вот и не знаю что делать )
И еще хотел спросить у вас такой вопрос ) т.е. если я буду использовать символы не относящиеся в командным (0 - 32) и только от 33 до 127 то тогда я буду пересылать символы которые одинаковы в cp1251 и ascii ?
Отредактировано med_phisiker (Сен. 15, 2013 14:01:50)
Офлайн
Нельзя слать данные в какой-то кодировке, можно только подразумевать на принимающей стороне, что поток байтов, которые были получены, следует трактовать как текст в какой-либо кодировке.
Офлайн
Хорошо всем спасибо за ответы ) Если я правильно понял микроконтроллер работает с байтами и отвечает байтами, а трактует как символы их уже сам Python - терминал который трактует их по кодировке cp1251. Значит мне просто нужно декодировать приходящие байты в любую удобную мне кодировку )
Офлайн
может вам как-то позаботиться чтобы самому отформатировать сообщения при выводе на консоль?
>>> ",".join([hex(i) for i in bytearray("\x03\n\t")]) '0x3,0xa,0x9'
Офлайн
Всем спасибо за ответы - проблема решена ), я решил осуществить форматирование наперед заданными юникод-символами по совету doza_and. Юникод код ascii символа можно получить следующим образом, в блокноте windows нажать alt + <десятичный номер символа на дополнительной клавиатуре>, в блокноте появиться ascii символ, дальше его можно вставить в конвертер который пишет юникод код символа. Я использовал конвертер с http://ascii.org.ru/ может кому пригодиться ) Далее составил свой формат по совету doza_and, составлять пришлось только для служебных символов 0-32, которые отображаются не так как в таблице ascii, а остальные и так прекрасно работают. Как я понял 0-32 это служебные символы не предназначенные для отображения пользователю, поэтому в разных редакторах они могут выглядеть по разному. Все работает, теперь Python печатает и “служебные символы из ascii таблицы” 0-32 в символах указанных в таблице(как в блокноте windows), еще раз всем спасибо )
например теперь при получении байта hex “\x03” или dec 3 Python терминал выведет символ
print unichr(9829)
Отредактировано med_phisiker (Сен. 16, 2013 15:55:40)
Офлайн