我正在学习Python 3,但找不到以下问题的任何解释。我正在使用此代码从字节字符串计算JAMCRC:
import zlib
x = b'a'
result = int('0b'+'1'*32,2) - zlib.crc32(x)
print(result)
对于'a',它打印390611388
。我正在将上述脚本计算出的JAMCRC结果与第三方程序(可能是用.NET或C#编写的Windows .exe)进行比较。对于标准ASCII字符和字符串,两个程序(脚本和第三方程序之上)的结果均相等。问题是,当我尝试从波兰语字母计算JAMCRC时,这些程序的结果是不同的。例如,当我将x
设置为'ó'时,我的脚本将打印211389371
,但是其他用于'ó'的程序将打印155825108
。我想让我的脚本为波兰字母打印出与其他程序中相同的结果。您知道该怎么做,以及造成波兰字符差异的原因吗?
In [1]: x = 'ó'.encode('utf8')
In [2]: print(int('0b'+'1'*32,2) - zlib.crc32(x))
211389371
In [3]: x = 'ó'.encode('8859')
In [4]: print(int('0b'+'1'*32,2) - zlib.crc32(x))
155825108
编辑:上面的代码在Python 3.7中为我工作。有关所有可用编码列表的链接,请参见下面的@daxim评论。此代码在Python 2中无法按原样工作,因为Python 2字符串以ASCII / latin-1编码,而Python 3字符串以Unicode编码。如果需要的话,您需要专门查找如何在Python 2中处理unicode字符串。 我要说的就是这一点 Python 2将于2020年开始报废;它已经问世多年了,如果您正在编写新代码,那么它确实应该在Python 3中使用(上面的示例代码是一个很好的动力)。