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没有正确处理西里尔语?线的尽头并不是直线而且杂乱无章。使用格式是一样的。如何纠正?感谢
答案 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
来获取字符长度,这就是您想要的。
希望这有帮助。