Python将字节字符串转换为字节数组

Python将字节字符串转换为字节数组,python,character-encoding,Python,Character Encoding,例如,给定一个任意字符串。可以是字符或只是随机字节: string = '\xf0\x9f\xa4\xb1' 我想输出: b'\xf0\x9f\xa4\xb1' 这似乎很简单,但我在任何地方都找不到答案。当然,只需键入b,然后键入字符串即可。但我想在运行时执行此操作,或者从包含字节字符串的变量执行此操作 如果给定的字符串是AAAA或一些已知的字符,我可以简单地执行string.encode('utf-8'),但我希望字节字符串是随机的。对'\xf0\x9f\xa4\xb1'(随机字节)执行此

例如,给定一个任意字符串。可以是
字符
或只是随机
字节

string = '\xf0\x9f\xa4\xb1'
我想输出:

b'\xf0\x9f\xa4\xb1'
这似乎很简单,但我在任何地方都找不到答案。当然,只需键入
b
,然后键入字符串即可。但我想在运行时执行此操作,或者从包含字节字符串的变量执行此操作

如果给定的
字符串
AAAA
或一些已知的
字符
,我可以简单地执行
string.encode('utf-8')
,但我希望字节字符串是随机的。对
'\xf0\x9f\xa4\xb1'
(随机字节)执行此操作会产生意外的结果
b'\xc3\xb0\xc2\x9f\xc2\xa4\xc2\xb1'

一定有更简单的方法吗

编辑:


我想在不使用编码的情况下将字符串转换为字节

我找到了一个可行的解决方案

import struct

def convert_string_to_bytes(string):
    bytes = b''
    for i in string:
        bytes += struct.pack("B", ord(i))
    return bytes       
string='\xf0\x9f\xa4\xb1'

打印(将字符串转换为字节(字符串))

输出:
b'\xf0\x9f\xa4\xb1'

我找到了一个有效的解决方案

import struct

def convert_string_to_bytes(string):
    bytes = b''
    for i in string:
        bytes += struct.pack("B", ord(i))
    return bytes       
string='\xf0\x9f\xa4\xb1'

打印(将字符串转换为字节(字符串))

输出:
b'\xf0\x9f\xa4\xb1'

拉丁字符编码非常简单(与Python支持的其他编码不同),它将0x00-0xff范围内的每个代码点编码为具有相同值的字节

byteobj='\xf0\x9f\xa4\xb1'.encode('latin-1'))
你说你不想使用编码,但是避免它的替代方案似乎要差得多

UTF-8编码是不合适的,因为正如您已经发现的,0x7f以上的代码点映射到多个字节(最多四个字节)的序列,而这些字节都不是作为字节值的输入代码点


省略
.encode()
(如现在删除的答案)的参数会迫使Python猜测编码,这会产生依赖于系统的行为(可能会在除Windows之外的大多数系统上选择UTF-8,在Windows中,它通常会选择更不可预测、通常更险恶和可怕的东西)

byteobj='\xf0\x9f\xa4\xb1'.encode('latin-1'))
你说你不想使用编码,但是避免它的替代方案似乎要差得多

UTF-8编码是不合适的,因为正如您已经发现的,0x7f以上的代码点映射到多个字节(最多四个字节)的序列,而这些字节都不是作为字节值的输入代码点


省略
.encode()
(如现在删除的答案)的参数会迫使Python猜测编码,这会产生依赖于系统的行为(可能会在除Windows之外的大多数系统上选择UTF-8,在Windows中,它通常会选择更不可预测、通常更险恶和可怕的东西).

是否要将字符串转换为字节?目前还不清楚理想的解决方案是什么。。。如果您知道它是一个没有b的字节字符串,您可以进行一些字符串格式化。如果需要字节,可以调用
bytes(string)
。这有帮助吗:?是的,我想简单地将字符串转换为bytes好的,我知道你的问题了。您可能需要使用原始字符串
字节
函数接受
字符串
编码
。因为我期望的字节是随机的,所以我不想为它选择编码。是否要将字符串转换为字节?目前还不清楚理想的解决方案是什么。。。如果您知道它是一个没有b的字节字符串,您可以进行一些字符串格式化。如果需要字节,可以调用
bytes(string)
。这有帮助吗:?是的,我想简单地将字符串转换为bytes好的,我知道你的问题了。您可能需要使用原始字符串
字节
函数接受
字符串
编码
。因为我期望的字节是随机的,所以我不想为它选择编码