Форум сайта python.su
0
Добрый вечер уважаемые !
у меня возникла такая проблема:
функция шифрования побайтово шифрует файл, и расшифровывает так же побайтово…, НО! вся беда в том, что после расшифрования каждая русская буква воспринимается как 2 отдельных байта(особенность utf-8 ), посоветуйте, как сделать так что бы эти 2 байта воспринимались как русские буквы…
Офлайн
0
Прочитал заголовок, в шоке…
Офлайн
0
CarzilНу да …, трудно объяснить суть проблемы…, вообщем вот листинг
Прочитал заголовок, в шоке…
http://codepad.org/u0nsicvx
http://www.itsec.ru/articles2/Inf_security/novy-alg-shifrov
Отредактировано (Дек. 3, 2011 20:04:03)
Офлайн
0
просто задача шифровать любой файл …, ели бы только английский русский текст, то можно было бы считать посимвольно и не парится… (ну единственное 255 заменить на 65535) но так как надо шифровать любой файл приходится считать побайтово …, сообтветственно как то так надо и записать, что бы потом и русский распознался…,
Офлайн
253
У вас питон не понял кодировку файла похоже
добавьте в начале файла чтото типа
#!/usr/bin/env python
# -*- coding: utf-8 -*-
чтобы кодировка файла была явно прописана
Офлайн
0
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)
Офлайн
857
>>> 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)
Офлайн
253
Я посмотрел ваш листинг: http://codepad.org/u0nsicvx
там сообщение об ошибке
Line 10
SyntaxError: Non-ASCII character ‘\xce’
Оно связано с тем что не указана кодировка для файла t.py
поскольку там есть Δx. как раз на 10 строчке (хоть и в комментариях но все равно)
Если листинг устарел то извините….
В файл в виде байтов записывается так:
python 3.x:
x="ывафавфа"
with open("output.txt","wb",encoding="utf-8") as f:
f.write(x)
import codecs
x=u"ывафавфа"
with codecs.open("output.txt","wb",encoding="utf-8") as f:
f.write(x)
Отредактировано (Дек. 4, 2011 07:43:52)
Офлайн
0
py.user.nextО ! прекрастно !!! то что нужно ! остался маленький ньюанс, если у меня функция выплевывает числа (от 0 до 255) как их преобразовать в строку вида \xd0\xb0\xd0\xb1\xd0\xb2 ?нужно накопить байты где-нибудь, а потом раскодировать их, используя кодировку>>> 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
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);
Офлайн