Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 3, 2011 18:45:59

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

Добрый вечер уважаемые !
у меня возникла такая проблема:
функция шифрования побайтово шифрует файл, и расшифровывает так же побайтово…, НО! вся беда в том, что после расшифрования каждая русская буква воспринимается как 2 отдельных байта(особенность utf-8 ), посоветуйте, как сделать так что бы эти 2 байта воспринимались как русские буквы…



Офлайн

#2 Дек. 3, 2011 19:50:26

Carzil
От:
Зарегистрирован: 2010-05-26
Сообщения: 106
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

Прочитал заголовок, в шоке…



Офлайн

#3 Дек. 3, 2011 20:02:04

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

Carzil
Прочитал заголовок, в шоке…
Ну да …, трудно объяснить суть проблемы…, вообщем вот листинг
http://codepad.org/u0nsicvx
уж извините убогий стиль написания.., я только учу питон, да для понимания алгоритма вот его описание
http://www.itsec.ru/articles2/Inf_security/novy-alg-shifrov



Отредактировано (Дек. 3, 2011 20:04:03)

Офлайн

#4 Дек. 3, 2011 20:44:01

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

просто задача шифровать любой файл …, ели бы только английский русский текст, то можно было бы считать посимвольно и не парится… (ну единственное 255 заменить на 65535) но так как надо шифровать любой файл приходится считать побайтово …, сообтветственно как то так надо и записать, что бы потом и русский распознался…,



Офлайн

#5 Дек. 3, 2011 20:46:38

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

У вас питон не понял кодировку файла похоже
добавьте в начале файла чтото типа
#!/usr/bin/env python
# -*- coding: utf-8 -*-

чтобы кодировка файла была явно прописана



Офлайн

#6 Дек. 3, 2011 21:24:45

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

doza_and
У вас питон не понял кодировку файла похоже
добавьте в начале файла чтото типа
#!/usr/bin/env python
# -*- coding: utf-8 -*-

чтобы кодировка файла была явно прописана
нет нет, все он понял…, так как когда я считываю и шифрую посимвольно все нормально,
но вот побайтово ..,
 if ((Y < 255) and (Y >= 0)):
self.decrypt_text += chr(math.ceil(Y))
elif (Y < 0):
self.decrypt_text += chr(math.ceil(Y) + 255)
elif (Y > 255):
self.decrypt_text += chr(math.ceil(Y) - 255)
да тут есть моя ошибка, что не надо делать символ из каждого расшифровываемого байта, но тогда как записывать?
допустим я расшифровал байт получил число(т.е. байт) но как его записать в файл в виде байта ?
понимаю что достаточно расплывчато все объяснил но все же ..,



Офлайн

#7 Дек. 3, 2011 22:56:56

py.user.next
От:
Зарегистрирован: 2010-04-29
Сообщения: 10015
Репутация: +  857  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

>>> s = '\xd0\xb0\xd0\xb1\xd0\xb2'
>>> s
'\xd0\xb0\xd0\xb1\xd0\xb2'
>>> s.decode('utf-8')
u'\u0430\u0431\u0432'
>>> print s.decode('utf-8')
абв
>>>
нужно накопить байты где-нибудь, а потом раскодировать их, используя кодировку



Отредактировано (Дек. 3, 2011 22:57:57)

Офлайн

#8 Дек. 4, 2011 07:39:47

doza_and
От:
Зарегистрирован: 2010-08-15
Сообщения: 4138
Репутация: +  253  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

Я посмотрел ваш листинг: http://codepad.org/u0nsicvx
там сообщение об ошибке
Line 10
SyntaxError: Non-ASCII character ‘\xce’
Оно связано с тем что не указана кодировка для файла t.py
поскольку там есть &#916;x. как раз на 10 строчке (хоть и в комментариях но все равно)
Если листинг устарел то извините….

В файл в виде байтов записывается так:
python 3.x:

x="ывафавфа"
with open("output.txt","wb",encoding="utf-8") as f:
f.write(x)
python 2.x:
import codecs
x=u"ывафавфа"
with codecs.open("output.txt","wb",encoding="utf-8") as f:
f.write(x)
для трешки могу ошибаться.



Отредактировано (Дек. 4, 2011 07:43:52)

Офлайн

#9 Дек. 4, 2011 07:47:13

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

py.user.next
>>> s = '\xd0\xb0\xd0\xb1\xd0\xb2'
>>> s
'\xd0\xb0\xd0\xb1\xd0\xb2'
>>> s.decode('utf-8')
u'\u0430\u0431\u0432'
>>> print s.decode('utf-8')
абв
>>>
нужно накопить байты где-нибудь, а потом раскодировать их, используя кодировку
О ! прекрастно !!! то что нужно ! остался маленький ньюанс, если у меня функция выплевывает числа (от 0 до 255) как их преобразовать в строку вида \xd0\xb0\xd0\xb1\xd0\xb2 ?



Офлайн

#10 Дек. 4, 2011 08:00:47

br3d
От:
Зарегистрирован: 2011-05-02
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

из байт кода обратно в русский

doza_and
В файл в виде байтов записывается так:
python 3.x:
x="ывафавфа"
with open("output.txt","wb",encoding="utf-8") as f:
f.write(x)
странно, вот при такой записи
with open(tmp.path2,"wb",encoding="utf-8") as f:
f.write(my_decrypt);
эклипс мне сказал ValueError: binary mode doesn't take an encoding argument



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version