我在用Python3.5,我想把\xe1BA\x06\xbe\x084
改成b'\xe1BA\x06\xbe\x084'
但使用'\xe1BA\x06\xbe\x084'.encode('ascii')
或'\xe1BA\x06\xbe\x084'.encode('utf-8')
不起作用。
在.encode('utf-8')
中,它将变成b'\xc3\xa1BA\x06\xc2\xbe\x084'
与b'\xe1BA\x06\xbe\x084'
怎么处理?
最佳答案
使用latin1
编解码器。
>>> '\xe1BA\x06\xbe\x084'.encode('latin1')
b'\xe1BA\x06\xbe\x084'
之所以这样做(也是这样),是因为最初那些字节序列是由ISO-8859-1 standard定义为那些字符的,因此使用这种编码方式将它们向下编码,可以使您返回那些确切的字节。
虽然另一个答案是有用的(循环所有可用的编解码器以获得所有可能的输出是很好的),但请记住,虽然其他特定的编解码器将为某些特定字符串工作,但它可能最终映射到相同的基“字节”序列。
>>> '\xfe'.encode('iso8859_9')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python3.5/encodings/iso8859_9.py", line 12, in encode
return codecs.charmap_encode(input,errors,encoding_table)
UnicodeEncodeError: 'charmap' codec can't encode character '\xfe' in position 0: character maps to <undefined>
>>> '\xfe'.encode('latin1')
b'\xfe'
>>>
当然,如果您的目的是将所有内容编码为基本字节编码,也允许通过
raw_unicode_escape
表单表示任何>\xff
内容,则\\uXXXX
可能很有用:>>> 'あ'.encode('latin1')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'latin-1' codec can't encode character '\u3042' in position 0: ordinal not in range(256)
>>> 'あ'.encode('raw_unicode_escape')
b'\\u3042'
>>>
当然,选择对你的意图最有意义的策略。
关于python - Python3将字符串更改为字节,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/39554250/