当我查看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")
答案 0 :(得分:1)
原因可能很简单。 Python将字符串作为字节处理。默认情况下,Python 2应该仅使用ASCII源代码,但是很可能存在Latin-1编码。字节的文字表示形式取决于源文件的编码。
因此,您需要使用Latin-1与旧应用程序生成的字节表示形式尽可能兼容。当然,如今通常最好默认为UTF-8。我强烈建议将字符显式编码为UTF-8,而不要依赖于任何默认值。
在名为py3compat.py
的文件中存在此事实并非偶然。