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好的,我知道你的问题了。您可能需要使用原始字符串字节
函数接受字符串
和编码
。因为我期望的字节是随机的,所以我不想为它选择编码