gpt4 book ai didi

Python - 特殊字符产生不同的 CRC 结果

转载 作者:行者123 更新时间:2023-12-01 00:17:37 25 4
gpt4 key购买 nike

我正在学习 Python 3,但找不到以下问题的任何解释。我使用此代码从字节字符串计算 JAMCRC:

import zlib

x = b'a'
result = int('0b'+'1'*32,2) - zlib.crc32(x)
print(result)

对于“a”,它打印390611388。我将上述脚本计算出的 JAMCRC 结果与第三方程序(Windows .exe,可能用 .NET 或 C# 编写)进行比较。对于标准 ASCII 字符和字符串,两个程序(上述脚本和第三方程序)的结果是相同的。问题是,当我尝试根据波兰语字母计算 JAMCRC 时,这些程序的结果是不同的。例如,当我将 x 设置为“ó”时,我的脚本会打印 211389371,但“ó”的其他程序会打印 155825108。我想让我的脚本打印波兰语字母的结果与其他程序中的结果相同。您知道如何做到这一点以及是什么导致了波兰语字符的差异吗?

最佳答案

Python defaults to using Unicode ,特别是 UTF-8。 Windows, however, apparently defaults to ISO 8859 encoding 。使用此编码方案会产生相同的 CRC:

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(上面的示例代码是一个很好的动机)。

关于Python - 特殊字符产生不同的 CRC 结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59203935/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com