Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2016 09:45:56

skydriver
Зарегистрирован: 2016-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

Добрый день.

Есть unicode строка с символом“№”:
str = u'primer №1'
выводим эту строку и получаем
>>> print str
primer ¹1

Вместо символа № получили символ ¹. Почему и как это исправить подскажите пожалуйста?

А если далее сделать так получим другую непонятку:
>>> str2 = str.encode('utf-8')
>>> print str2
primer В№1
В строке появился лишний символ.

Need help

Офлайн

#2 Май 24, 2016 10:35:24

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

Вы в консоли код набираете, или это файл?



Офлайн

#3 Май 24, 2016 12:04:09

skydriver
Зарегистрирован: 2016-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

В Python GUI

Офлайн

#4 Май 24, 2016 13:41:23

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

ОС?



Офлайн

#5 Май 24, 2016 14:00:59

skydriver
Зарегистрирован: 2016-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

Windows Server 2008

Офлайн

#6 Май 24, 2016 16:15:41

FishHook
От:
Зарегистрирован: 2011-01-08
Сообщения: 8312
Репутация: +  568  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

skydriver
'utf-8
Мне кажется, в винде другая кодировка используется, что-то типа Windows-1251



Офлайн

#7 Май 24, 2016 22:27:08

skydriver
Зарегистрирован: 2016-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

То есть это расценивать как глюк питона в Windows?

Офлайн

#8 Май 24, 2016 23:45:46

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

Странное преобразование символа "№"

skydriver
То есть это расценивать как глюк питона в Windows?
Что у вас происходит по вашему описанию непонятно.
Что такое Python GUI? Idle?
Скорее всего это надо расценивать как особенность (глюк если хотите) Windows. В unix обычно и в файлах и в консоли и в приложениях используется одна кодировка. В windows обычно встречается три. cp1251 cp866 utf-8. запросто получается что программа выдает данные в одной кодировке, а другая думает что они в другой. Кроме того windows поддерживает далеко не все символы utf-8 (т.е. просто не умеет их корректно отображать).



Офлайн

#9 Май 24, 2016 23:54:44

skydriver
Зарегистрирован: 2016-05-24
Сообщения: 6
Репутация: +  0  -
Профиль   Отправить e-mail  

Странное преобразование символа "№"

Да, имел ввиду Idle. Но что значит, что программа выдает в одной кодировке, а другая думает, что они в другой, другой же нет, речь о Idle и только. Причем мы кодировку явно задаем посредством спецификатора u, строка в юникод, ее же выводим и получаем другой результат. Причем проблема именно с этим символом, с другими подобной проблемы нет. А то, что windows поддерживает utf-8 не в полном объеме вообще новость, это же стандарт, его можно или поддерживать или нет…

Офлайн

#10 Май 25, 2016 10:25:02

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

Странное преобразование символа "№"

skydriver
или поддерживать или нет…
Если вы так думаете то windows не поддерживает utf-8.
Вот из Idle Скопировал
>>> aa="dasd№"
>>> print aa
dasd
>>> aa=u"dasd\u2116"
>>> print aa
dasd

Никакого глюка нет. Idle использует кодировку для интерпретации ввода (идентично тому что делает питон при получении данных из файла). u побуждает питон преобразовать поток байт литерала в unicode - в переменной aa - всегда не то, что находится в строковом литерале! Вот он и преобразовывает. Если вы корректно вставите unicode символ то никаких проблем не будет. Не желаете преобразования не ставьте u



Отредактировано doza_and (Май 25, 2016 10:25:25)

Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version