python格式不正确的西里尔文

时间:2013-03-03 03:16:51

标签: python python-2.7

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没有正确处理西里尔语?线的尽头并不是直线而且杂乱无章。使用格式是一样的。如何纠正?感谢

1 个答案:

答案 0 :(得分:2)

阅读本文:

基本上,text参数中inp函数的含义是一个字符串。在Python 2.7中,字符串默认为字节。当在例如字母中编码时,Cyrilic字符不被映射1-1到字节。 utf-8编码,但需要多个字节(通常是utf-8中的2),因此当你执行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)

首先解码文本,这会产生一个unicode字符串。之后,您可以使用内置的len来获取字符长度,这就是您想要的。

希望这有帮助。