我在用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/

10-12 04:44