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 不能正确处理西里尔字母?线的末端不是笔直和杂乱无章的。使用格式也是如此。如何纠正?谢谢

4

1 回答 1

2

读这个:

基本上,函数的text参数inp是一个字符串。在 Python 2.7 中,字符串默认为字节。当以 utf-8 编码进行编码时,西里尔字符不会 1-1 映射到字节,但需要一个以上的字节(在 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来获取字符长度,这就是您想要的。

希望这可以帮助。

于 2013-03-03T03:48:14.583 回答