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)

重要な行は次の2つです。

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

最初にテキストをデコードすると、Unicode文字列になります。その後、組み込みを使用して、必要lenな文字数の長さを取得できます。

お役に立てれば。

于 2013-03-03T03:48:14.583 に答える