skydriver
Май 24, 2016 09:45:56
Добрый день.
Есть unicode строка с символом“№”:
str = u'primer №1'
выводим эту строку и получаем
>>> print str
primer ¹1
Вместо символа № получили символ ¹. Почему и как это исправить подскажите пожалуйста?
А если далее сделать так получим другую непонятку:
>>> str2 = str.encode('utf-8')
>>> print str2
primer В№1
В строке появился лишний символ.
Need help
FishHook
Май 24, 2016 10:35:24
Вы в консоли код набираете, или это файл?
FishHook
Май 24, 2016 16:15:41
skydriver
'utf-8
Мне кажется, в винде другая кодировка используется, что-то типа Windows-1251
skydriver
Май 24, 2016 22:27:08
То есть это расценивать как глюк питона в Windows?
doza_and
Май 24, 2016 23:45:46
skydriver
То есть это расценивать как глюк питона в Windows?
Что у вас происходит по вашему описанию непонятно.
Что такое Python GUI? Idle?
Скорее всего это надо расценивать как особенность (глюк если хотите) Windows. В unix обычно и в файлах и в консоли и в приложениях используется одна кодировка. В windows обычно встречается три. cp1251 cp866 utf-8. запросто получается что программа выдает данные в одной кодировке, а другая думает что они в другой. Кроме того windows поддерживает далеко не все символы utf-8 (т.е. просто не умеет их корректно отображать).
skydriver
Май 24, 2016 23:54:44
Да, имел ввиду Idle. Но что значит, что программа выдает в одной кодировке, а другая думает, что они в другой, другой же нет, речь о Idle и только. Причем мы кодировку явно задаем посредством спецификатора u, строка в юникод, ее же выводим и получаем другой результат. Причем проблема именно с этим символом, с другими подобной проблемы нет. А то, что windows поддерживает utf-8 не в полном объеме вообще новость, это же стандарт, его можно или поддерживать или нет…
doza_and
Май 25, 2016 10:25:02
skydriver
или поддерживать или нет…
Если вы так думаете то windows не поддерживает utf-8.
Вот из Idle Скопировал
>>> aa="dasd№"
>>> print aa
dasd№
>>> aa=u"dasd\u2116"
>>> print aa
dasd№
Никакого глюка нет. Idle использует кодировку для интерпретации ввода (идентично тому что делает питон при получении данных из файла). u побуждает питон преобразовать поток байт литерала в unicode - в переменной aa - всегда не то, что находится в строковом литерале! Вот он и преобразовывает. Если вы корректно вставите unicode символ то никаких проблем не будет. Не желаете преобразования не ставьте u