UnicodeDecodeError:将以太坊私钥的python字节串转换为字符串?

时间:2021-01-04 22:26:54

标签: python utf-8

我正在使用 eth-keyfile 从以太坊密钥文件中提取私钥。

# https://github.com/ethereum/eth-keyfile
from eth_keyfile import extract_key_from_keyfile

password = b'secretpassword'
extracted = extract_key_from_keyfile('testkey.json', password)
print(extracted.decode('utf-8'))

我得到一个 UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd4 in position 0: invalid continuation byte。我也尝试过其他编码(utf-16、latin-1)。

如何找出要使用的编码?

1 个答案:

答案 0 :(得分:1)

我对以太坊了解不多,但据我从 Google 快速搜索中得知,您可能希望以十六进制字符串的形式表示字节字符串。

假设您使用的是 Python 3+;这应该可以解决问题:

from eth_keyfile import extract_key_from_keyfile

password = b'secretpassword'
extracted = extract_key_from_keyfile('testkey.json', password)
print(extracted.hex())

为了更好地理解发生了什么,我做了这个小演示:

>> # Python bytestring filled with the byte 0x41
>> bytes = b"\x41\x41\x41\x41"

>> # 0x41 is the ascii representation of the character 'a' so:
>> print(bytes.decode('utf-8'))
>> "aaaa"

>> # Now we have a regular string with the characters '4' '1':
>> print(bytes.hex())
>> "41414141"