Уведомления

Группа в Telegram: @pythonsu

#1 Янв. 11, 2008 07:34:36

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

Не получается правильно подсчитать количество букв в строке. Как можно их подсчитать правильно?



Офлайн

#2 Янв. 11, 2008 08:42:35

bialix
От:
Зарегистрирован: 2006-07-13
Сообщения: 774
Репутация: +  1  -
Профиль   Отправить e-mail  

len() и русские буквы

пальцем



Офлайн

#3 Янв. 11, 2008 09:28:59

tabajara
От:
Зарегистрирован: 2007-01-02
Сообщения: 148
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

bialix + 1 )))
vak покажи кусок коду



Офлайн

#4 Янв. 11, 2008 10:44:32

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

vak
Не получается правильно подсчитать количество букв в строке. Как можно их подсчитать правильно?
>>> s1 = u'Длина этого текста равна 27'
>>> len(s1)
27



Офлайн

#5 Янв. 11, 2008 11:16:20

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы


>>> s1 = u'Длина этого текста равна 27'
>>> len(s1)
27
Так у меня тоже получается.
А если просто в переменной?
Конечная задача - вывод на печать текста и подсчет символов для того чтобы текст вписывался в размер бумаги.
Строки, которые, печатаю хранятся в базе PostgreSQL уже в UTF-8. Вообще строки печатаются, выводятся без проблем, но вот с подсчетом символов - не получается у меня.
Печатаю через reportlab
Ничего “умнее” пока не придумал.



Отредактировано (Янв. 11, 2008 11:26:17)

Офлайн

#6 Янв. 11, 2008 11:29:18

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

vak
Конечная задача - вывод на печать текста и подсчет символов для того чтобы текст вписывался в размер бумаги.
Печатаю через reportlab
Ничего “умнее” пока не придумал.
там должен метод который считает длину строки в pdf, но меня с ним были проблемы - вылетала ошибка.

PS если тебе нужно распечатать текст или создать pdf - посмотри утилиту pisa (http://python.com.ua/forum/viewtopic.php?id=1642)



Офлайн

#7 Янв. 11, 2008 12:52:06

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

Может это наведёт на мысли:

text = u'Какой-то текст в перемешку с latin-ицей'
text_utf8 = text.encode('utf-8')
print ‘text (%s):\n%s\n\ntext_utf8 (%s):\n%s’ % (len(text), repr(text), len(text_utf8), repr(text_utf8))

Результат:

text (39):
u'\u041a\u0430\u043a\u043e\u0439-\u0442\u043e \u0442\u0435\u043a\u0441\u0442 \u0432 \u043f\u0435\u0440\u0435\u043c\u0435\u0448\u043a\u0443 \u0441 latin-\u0438\u0446\u0435\u0439'

text_utf8 (66):
'\xd0\x9a\xd0\xb0\xd0\xba\xd0\xbe\xd0\xb9-\xd1\x82\xd0\xbe \xd1\x82\xd0\xb5\xd0\xba\xd1\x81\xd1\x82 \xd0\xb2 \xd0\xbf\xd0\xb5\xd1\x80\xd0\xb5\xd0\xbc\xd0\xb5\xd1\x88\xd0\xba\xd1\x83 \xd1\x81 latin-\xd0\xb8\xd1\x86\xd0\xb5\xd0\xb9'



Офлайн

#8 Янв. 11, 2008 13:27:41

pythonwin
От:
Зарегистрирован: 2006-07-18
Сообщения: 1294
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

poltergeist
Может это наведёт на мысли:
poltergeist, вопрос в том что vak хочет узнать длину текста в pdf-документе в точках или пикселях.

vak
Печатаю через reportlab
Ничего “умнее” пока не придумал.
vak, как понимаю ты это делаешь для переноса строк?



Отредактировано (Янв. 11, 2008 13:31:05)

Офлайн

#9 Янв. 11, 2008 14:09:23

poltergeist
От:
Зарегистрирован: 2007-02-28
Сообщения: 522
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

Я просто думал, что vak получает текст в формате utf-8, и подсчитывая его длину получает неправильное кол-во символов. И чтобы получить точное кол-во знакомест, надо подсчитывать длину юникодного текста, для чего требуется сделать так:

text = ‘some text from PosgreSQL in utf-8’
str_len = len(text.decode('utf-8'))

И я думаю, что я правильно думаю:)



Отредактировано (Янв. 11, 2008 14:11:18)

Офлайн

#10 Янв. 11, 2008 16:58:52

vak
От:
Зарегистрирован: 2007-05-04
Сообщения: 262
Репутация: +  0  -
Профиль   Отправить e-mail  

len() и русские буквы

Всем спасибо!
Путем долгих экспериментов получилось решить проблему так:

text = unicode(text, ‘utf-8’)
str_len = len(text)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version