为什么python cryptodome使用latin-1编码和解码字符串?

时间:2018-10-17 05:51:08

标签: python cryptography

当我查看Cryptodome的代码时,我发现latin-1编码与utf-8注释会引起我们不想要的副作用一起使用。

例如,py3compat.py中的Cryptodome使用以下编码对字符串进行编码和解码。

def tobytes(s):
    if isinstance(s,bytes):
        return s
    else:
        if isinstance(s,str):
            return s.encode("latin-1")
        else:
            return bytes([s])
def tostr(bs):
    return bs.decode("latin-1")

1 个答案:

答案 0 :(得分:1)

原因可能很简单。 Python将字符串作为字节处理。默认情况下,Python 2应该仅使用ASCII源代码,但是很可能存在Latin-1编码。字节的文字表示形式取决于源文件的编码。

因此,您需要使用Latin-1与旧应用程序生成的字节表示形式尽可能兼容。当然,如今通常最好默认为UTF-8。我强烈建议将字符显式编码为UTF-8,而不要依赖于任何默认值。

在名为py3compat.py的文件中存在此事实并非偶然。