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