Python, len и фрагменты в строках Unicode - PullRequest
9 голосов
/ 17 апреля 2011

Я работаю с ситуацией, когда мне нужно привести строку в соответствие выделенному промежутку на экране, так как я использую unicode len (), а ломтики [] работают, видимо, на байтах, и в итоге я урезаю строки unicode слишком короткимипотому что занимает только один пробел на экране, но 2 для len () или слайсов [].

У меня правильно настроены заголовки кодирования, и я готов использовать другие вещи, кроме слайсов или len(), чтобы справиться с этим, но мне действительно нужно знать, сколько пробелов займет строка и как сократить ее до доступного.

$cat test.py
# -*- coding: utf-8 -*-
a = "2 €uros"
b = "2 Euros"
print len(b)
print len(a)
print a[3:]
print b[3:]

$python test.py
7
9
��uros
uros

1 Ответ

16 голосов
/ 17 апреля 2011

Вы не создаете строки Unicode там;вы создаете байтовые строки с кодировкой UTF-8 (как вы видите, переменной длины).Вам нужно использовать константы вида u"..." (или u'...').Если вы сделаете это, вы получите ожидаемый результат:

% cat test.py
# -*- coding: utf-8 -*-
a = u"2 €uros"
b = u"2 Euros"
print len(b)
print len(a)
print a[3:]
print b[3:]
% python test.py 
7
7
uros
uros
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...