Форум сайта python.su
0
имеется простой скрипт:
# -*- coding: utf-8 -*- asd=("йцу", "ЫПРОИЬТБ", "ВАПпрпА АРИ") for x in asd: txt="{:*<20s}".format(x) print txt, " len() =",len(txt), " symbols", type(txt)
Отредактировано nesergen (Дек. 5, 2013 23:02:05)
Офлайн
221
ваш код, выполненный мною:
>>> asd=("йцу", "ЫПРОИЬТБ", "ВАПпрпА АРИ") >>> for x in asd: ... txt="{:*<20s}".format(x) ... print txt, " len() =",len(txt), " symbols", type(txt) ... йцу***************** len() = 20 symbols <type 'str'> ЫПРОИЬТБ************ len() = 20 symbols <type 'str'> ВАПпрпА АРИ********* len() = 20 symbols <type 'str'>
Офлайн
0
уточняю:
на питоне 2.7 выходит косяк
на питоне 3.2 всё в порядке
Решение нашел. Всё работает привидением всех строк к Юникоду.
Но всё равно не понятно, что же делает питон с обычными строками, что выводит меньше знаков чем надо, а считает количество столько сколько надо?
Отредактировано nesergen (Дек. 6, 2013 13:20:50)
Офлайн
20
Вы ведь знаете, что UTF-8, это кодировка с не фиксированным размером кода символа? `str` это набор байт (речь о Python2), а не набор символов. И то что эти байты, это строка в кодировке UTF-8, это только в вашей голове, интерпретатору ничего об этом не известно. В `str` кстати, с таким же успехом и JPEG храниться может, что тогда должен показать `len` :-) ?
..bw
Офлайн
47
в python2 используй юникодные строковые литералы
Офлайн