Python3 将字符串转换为字节

标签 python unicode utf-8

我使用的是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/

相关文章:

python - tox 始终返回 "dictionary changed size during iteration"

python - 在 linux 上登录时运行我的 Python 脚本

c++ - 尝试在代码块 13.12 中复制 strlwr 时出现奇怪的 ASCII 响应(中文)

regex - Ruby - 正则表达式允许 URL 中包含任何非 ASCII 中文字符

python - 在 Python LDAP 的搜索中使用括号

python - 这是在 Python 中运行 shell 脚本的正确方法吗?

python - 使用 ast.literal_eval 时出现格式错误的字符串

c++ - UTF-8解码库

ruby - 如何使用 Ruby 正则表达式来捕获非英语单词?

java 8写utf-8编码乱码