Найти - Пользователи
Полная версия: Странное преобразование символа "№"
Начало » Python для новичков » Странное преобразование символа "№"
1 2
skydriver
Добрый день.

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

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

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

Need help
FishHook
Вы в консоли код набираете, или это файл?
skydriver
В Python GUI
FishHook
ОС?
skydriver
Windows Server 2008
FishHook
skydriver
'utf-8
Мне кажется, в винде другая кодировка используется, что-то типа Windows-1251
skydriver
То есть это расценивать как глюк питона в Windows?
doza_and
skydriver
То есть это расценивать как глюк питона в Windows?
Что у вас происходит по вашему описанию непонятно.
Что такое Python GUI? Idle?
Скорее всего это надо расценивать как особенность (глюк если хотите) Windows. В unix обычно и в файлах и в консоли и в приложениях используется одна кодировка. В windows обычно встречается три. cp1251 cp866 utf-8. запросто получается что программа выдает данные в одной кодировке, а другая думает что они в другой. Кроме того windows поддерживает далеко не все символы utf-8 (т.е. просто не умеет их корректно отображать).
skydriver
Да, имел ввиду Idle. Но что значит, что программа выдает в одной кодировке, а другая думает, что они в другой, другой же нет, речь о Idle и только. Причем мы кодировку явно задаем посредством спецификатора u, строка в юникод, ее же выводим и получаем другой результат. Причем проблема именно с этим символом, с другими подобной проблемы нет. А то, что windows поддерживает utf-8 не в полном объеме вообще новость, это же стандарт, его можно или поддерживать или нет…
doza_and
skydriver
или поддерживать или нет…
Если вы так думаете то windows не поддерживает utf-8.
Вот из Idle Скопировал
>>> aa="dasd№"
>>> print aa
dasd
>>> aa=u"dasd\u2116"
>>> print aa
dasd

Никакого глюка нет. Idle использует кодировку для интерпретации ввода (идентично тому что делает питон при получении данных из файла). u побуждает питон преобразовать поток байт литерала в unicode - в переменной aa - всегда не то, что находится в строковом литерале! Вот он и преобразовывает. Если вы корректно вставите unicode символ то никаких проблем не будет. Не желаете преобразования не ставьте u
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB