Уведомления

Группа в Telegram: @pythonsu

#1 Июль 5, 2010 20:46:22

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

Проблема с кодировкой

ss="qwertyuiopasdfghjklzxcvbnm"
key="qwertyu"
c=""
a=0
for i in ss:
if a>len(key)-1: a=0
c+=chr(ord(i)+ord(key[a]) )
a+=1

print c
Исходний код сохранял в кодировке UTF8

Выводит:
��������������������������



Отредактировано (Июль 5, 2010 20:52:17)

Офлайн

#2 Июль 5, 2010 21:06:37

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

Проблема с кодировкой

теоретический твое инкрементирование превысило значение 127, при этом utf8 считает что символы в строке 2-х байтовые и выводит неизвесные символы. используй unicode вместо str

Офлайн

#3 Июль 5, 2010 21:19:05

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

Проблема с кодировкой

o7412369815963
Я тебя не понял, что нужно мене сделать, чтоб нормально работало?
Как использовать unicode?



Отредактировано (Июль 5, 2010 21:19:25)

Офлайн

#4 Июль 5, 2010 22:20:56

nerijus
От:
Зарегистрирован: 2010-06-03
Сообщения: 93
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема с кодировкой

ProLife
Я тебя не понял, что нужно мене сделать, чтоб нормально работало?
Как использовать unicode?
ss = u"qwertyuiopasdfghjklzxcvbnm"
key = u"qwertyu"
c = u""
a = 0

for i in ss:
if a > len(key)-1:
a = 0
c += unichr(ord(i) + ord(key[a]))
a += 1

print c
Только консоль в windows не может выводить code point больше 255. Так что результат или закодируй на какой нибудь latin-1 перед выводом, или пиши в файл, или пользуйся например idle вместо стандартной консоли.



Офлайн

#5 Июль 5, 2010 22:29:21

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

Проблема с кодировкой

Я работаю в линуксе, но всерано пишет ошибку в строчке print c

ss = u"qwertyuiopasdfghjklzxcvbnm"
key = u"qwertyu"
c = u""
a = 0

for i in ss:
if a > len(key)-1:
a = 0
c += unichr(ord(i) + ord(key[a]))
a += 1

print c

Traceback (most recent call last):
File "/home/ander/NetBeansProjects/NewPythonProject/src/newpythonproject.py", line 12, in <module>
print c
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-25: ordinal not in range(128)



Отредактировано (Июль 5, 2010 22:31:10)

Офлайн

#6 Июль 5, 2010 22:33:34

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

Проблема с кодировкой

Что мене так кодировать?

p = unicode(c, 'latin-1 ')

print p



Отредактировано (Июль 5, 2010 22:33:55)

Офлайн

#7 Июль 5, 2010 23:13:48

nerijus
От:
Зарегистрирован: 2010-06-03
Сообщения: 93
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема с кодировкой

print c.encode('latin-1')



Офлайн

#8 Июль 5, 2010 23:43:11

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

Проблема с кодировкой

Тоже самое выводит.



Офлайн

#9 Июль 6, 2010 00:21:22

nerijus
От:
Зарегистрирован: 2010-06-03
Сообщения: 93
Репутация: +  1  -
Профиль   Отправить e-mail  

Проблема с кодировкой

ProLife
Тоже самое выводит.
Только что проверил на windows и на freebsd, не выдает никаких ошибок. А какой тебе толк от этого print вообще? Если хочешь удостоверится правильно ли все работает, пиши в файл и смотри результат в hexadecimal.



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version