关于utf8字符的Python输出解释

时间:2018-10-16 09:53:10

标签: python ascii frequency analysis python-3.7

我有一个.txt文件,我需要计算其中所有字符的频率,以便对我的密码练习进行简单的频率分析。

我认为代码可以正常工作,但是Python似乎无法读取Ä,Ö,ß等字符(德语字母)。当代码正在读取.txt文件时,我认为它是utf8格式。

这是输出:

Counter({' ': 168, 'S': 136, '\xc3': 103, 'Z': 83, 'G': 80, 'P': 80,
'W': 76, 'J': 66, 'O': 63, 'Q': 62, 'R': 57, 'U': 57, 'L': 47, '\x84': 43,
'K': 39, '\x9c': 28, 'X': 25, 'A': 23, 'C': 22, '\x9f': 18, 'E': 17, 'N':
17, '\x96': 14, ',': 11, 'D': 8, 'Y': 8, 'T': 6, 'V': 6, 'B': 5, '"': 4,
"'": 3, 'F': 2, 'M': 2, '!': 1, '-': 1, '?': 1}) [Finished in 0.1s]

我的问题是如何解释反斜杠字符,例如'\ xc3'等。我在网上找不到有关如何翻译的任何内容?

编辑(我的代码):

from collections import Counter
with open('/Users/StB/Downloads/text.txt') as f:
    c = Counter()
    for x in f:
        c += Counter(x.strip())
print c

编辑2:

新输出:

Counter({' ': 168, 'S': 136, 'Z': 83, 'P': 80, 'G': 80, 'W': 76, 'J': 66, 'O': 63, 'Q': 62, 'R': 57, 'U': 57, 'L': 47, 'Ä': 43, 'K': 39, 'Ü': 28, 'X': 25, 'A': 23, 'C': 22, 'ß': 18, 'N': 17, 'E': 17, 'Ö': 14, ',': 11, 'Y': 8, 'D': 8, 'T': 6, 'V': 6, 'B': 5, '"': 4, "'": 3, 'F': 2, 'M': 2, '-': 1, '!': 1, '?': 1})

新代码:

from collections import Counter
with open('/Users/StB/Downloads/text.txt', encoding= 'utf - 8') as f:
    c = Counter()
    for x in f:
        c += Counter(x.strip())
print (c)

endcoding不适用于我在崇高的文本上运行的版本。在IDLE中工作正常!

1 个答案:

答案 0 :(得分:1)

对于Python 2,您将需要将要读取的字符串显式解码为Unicode。您也可以使用Counter.update方法来避免创建和丢弃Counter对象。

from collections import Counter
with open('/Users/StB/Downloads/text.txt') as f:
    c = Counter()
    for x in f:
        c.update(x.decode('utf-8').strip())
print c