我使用的是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'
>>>
当然,如果您的目的是将所有内容编码为基本字节编码形式,并且还允许通过 \xff
表示任何内容,则 raw_unicode_escape
可能会很有用\\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'
>>>
当然,选择对您的意图最有意义的策略。
关于Python3 将字符串转换为字节,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39554250/