2013-03-03 4 views
1
def inp(text): 
    tmp = str() 
    arr = ['.' for x in range(1, 40 - len(text))] 
    tmp += text + ''.join(arr) 
    print tmp 

s=['tester', 'om', 'sup', 'jope'] 
sr=['тестер', 'ом', 'суп', 'жопа'] 
for i in s: 
    inp(i) 
for i in sr: 
    inp(i) 

Выход:питон Неправильное форматирование кириллица

tester................................. 
om..................................... 
sup.................................... 
jope................................... 

тестер........................... 
ом................................... 
суп................................. 
жопа............................... 

Почему Python не правильно обрабатывать кириллицы? Конец линии не является прямым и прерывистым. Использование форматирования идет одинаково. Как это можно исправить? благодаря

ответ

2

Прочитайте это:

В принципе, что вы имеете в text параметр к inp функции является строка. В Python 2.7 строки по умолчанию являются байтами. Кириллические символы не отображаются 1-1 в байты при кодировании, например. utf-8, но требуется более одного байта (обычно 2 в utf-8), поэтому, когда вы делаете len(text), вы не получаете количество символов, а количество байтов.

Чтобы получить количество символов, вам необходимо знать свою кодировку. Если предположить, что это UTF-8, вы можете декодировать текст этой кодировки, и он будет печатать прямо:

#!/usr/bin/python 
# coding=utf-8 
def inp(text): 
    tmp = str() 
    utext = text.decode('utf-8') 
    l = len(utext) 
    arr = ['.' for x in range(1, 40 - l)] 
    tmp += text + ''.join(arr) 
    print tmp 

s=['tester', 'om', 'sup', 'jope'] 
sr=['тестер', 'ом', 'суп', 'жопа'] 
for i in s: 
    inp(i) 
for i in sr: 
    inp(i) 

важные линии эти два:

utext = text.decode('utf-8') 
    l = len(utext) 

где вы первый расшифровывать текст, что приводит к строка юникода. После этого вы можете использовать встроенный файл len, чтобы получить длину в символах, что вам нужно.

Надеюсь, это поможет.

+0

спасибо большое. Точный и подробный ответ. Еще раз спасибо. – Spouk

+0

@Spouk Уверенная вещь, рада помочь! –

Смежные вопросы