Ошибка UnicodeDecodeError: преобразование байтовой строки python закрытого ключа ethereum в строку?

#python #utf-8

#python #utf-8

Вопрос:

Я использую eth-keyfile для извлечения закрытого ключа из файла ключей ethereum.

 # 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:

Я мало что знаю об ethereum, но, насколько я могу судить по быстрому поиску в 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"x41x41x41x41"

>> # 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"