Python 3:将ByTestString表示为字符串(不解码)

Python 3:将ByTestString表示为字符串(不解码),python,python-3.x,Python,Python 3.x,是否有一种内置方法可以将bytestring“转换”为unicode字符串? 我不想解码它,我想要打印出来的没有“b”的字符串 e、 g。 输入: 输出: '\xb5\xb5\xb5\xb5\r\n1' 我尝试对字节字符串进行迭代,但这给了我一个整数列表: my_bytestring = b'%PDF-1.4\n%\x93\x8c\x8b\x9e' my_string = "" my_list = [] for char in my_bytestring: my_list.app

是否有一种内置方法可以将bytestring“转换”为unicode字符串? 我不想解码它,我想要打印出来的没有“b”的字符串

e、 g。 输入:

输出:

'\xb5\xb5\xb5\xb5\r\n1'  
我尝试对字节字符串进行迭代,但这给了我一个整数列表:

my_bytestring = b'%PDF-1.4\n%\x93\x8c\x8b\x9e'

my_string = ""
my_list = []
for char in my_bytestring:
    my_list.append(char)
    my_string += str(char)
print(my_list)   # -> list of ints
print(my_string) # -> string of converted ints
我得到:

[37, 80, 68, 70, 45, 49, 46, 52, 10, 37, 147, 140, 139, 158]
我想:

['%', 'P', 'D', 'F', '-', '1', '.', '4', '\\', 'n', '%', '\\', 'x', '9', '3', '\\', 'x', '8', 'c', '\\', 'x', '8', 'b', '\\', 'x', '9', 'e']
使用以下功能:

正如@hop所提到的,最好使用这种方法:

但是,看看第二个示例,您似乎需要:

使用以下功能:

正如@hop所提到的,最好使用这种方法:

但是,看看第二个示例,您似乎需要:


从技术上讲,不解码就无法从字节到字符串,但有一种编解码器可以满足您的需要:

>>> b = b'\xb5\xb5\xb5\xb5\r\n1'
>>> s = b.decode('unicode_escape')
>>> s
'µµµµ\r\n1'
>>> print(s)
µµµµ
1
还有
raw\u unicode\u escape
。你可以读到这些不同之处


我非常怀疑unicode字符串中是否有二进制数据的使用案例。

从技术上讲,没有解码就无法从字节到字符串,但有一种编解码器可以满足您的需要:

>>> b = b'\xb5\xb5\xb5\xb5\r\n1'
>>> s = b.decode('unicode_escape')
>>> s
'µµµµ\r\n1'
>>> print(s)
µµµµ
1
还有
raw\u unicode\u escape
。你可以读到这些不同之处



我非常怀疑unicode字符串中是否存在二进制数据的用例。

但从技术上讲,它们都是相同的字符串。。。c、 f:但没有一个答案符合我的要求。它们都是从unicode字符串解码或开始的。我修改了这个问题以显示我得到了什么和我需要什么。bytestring来自哪里?例如:为什么你不能只做
r'…'
而不做
b'…'
你想结果包含文字
\
x
b
等等?你在问两个不同的问题。第一个字符串被视为普通字符串(即
b'\xb5'
变为
'\xb5'
),而第二个字符串被视为原始字符串(即
b'\xb5'
变为
r'\xb5'
)。但它们在技术上是相同的字符串。。。c、 f:但没有一个答案符合我的要求。它们都是从unicode字符串解码或开始的。我修改了这个问题以显示我得到了什么和我需要什么。bytestring来自哪里?例如:为什么你不能只做
r'…'
而不做
b'…'
你想结果包含文字
\
x
b
等等?你在问两个不同的问题。第一个字符串被视为普通字符串(即
b'\xb5'
变成
'\xb5'
),而第二个字符串被视为原始字符串(即
b'\xb5'
变成
r'\xb5'
)。不要发明自己的
.decode()
使用
unicode\u转义
编码谢谢。只需在我的代码中将str(char)更改为chr(char)就可以了!谢谢@hop,我会添加它。你的链接看起来像是被某种脚本插入的。请问在哪里可以找到这个脚本?它看起来很有用。@Aran Fey:不幸的是,我还没有时间将它自动化,所以这都是手工的(猴子的工作):。不要发明你自己的
.decode()
使用
unicode\u escape
编码谢谢。只需在我的代码中将str(char)更改为chr(char)就可以了!谢谢@hop,我会添加它。你的链接看起来像是被某种脚本插入的。请问在哪里可以找到这个脚本?它看起来很有用。@Aran Fey:不幸的是,我还没有时间将它自动化,所以它都是手动的(猴子操作):。对第二个字符串不起作用。给出:UnicodeEncodeError:“charmap”编解码器无法对位置11-14中的字符进行编码:字符映射到@Yobmod,我无法重现
b'%PDF-1.4\n%\x93\x8c\x8b\x9e'。decode('unicode\u escape')
返回
'%PDF-1.4\n%\x93\x8c\x8b\x9e'
。对于第二个字符串不起作用。给出:UnicodeEncodeError:“charmap”编解码器无法对位置11-14中的字符进行编码:字符映射到@Yobmod,我无法重现
b'%PDF-1.4\n%\x93\x8c\x8b\x9e'。解码('unicode\u转义')
返回
'%PDF-1.4\n%\x93\x8c\x8b\x9e'
>>> s0 = b.decode(encoding="unicode_escape")
>>> s0
'µµµµ\r\n1'
>>> len(s0)
7
>>> my_bytestring = b'%PDF-1.4\n%\x93\x8c\x8b\x9e'
>>> l = [i for i in repr(my_bytestring)][2:-1]
>>> l
['%', 'P', 'D', 'F', '-', '1', '.', '4', '\\', 'n', '%', '\\', 'x', '9', '3', '\\', 'x', '8', 'c', '\\', 'x', '8', 'b', '\\', 'x', '9', 'e']
>>> len(my_bytestring), len(l)
(14, 27)
>>> b = b'\xb5\xb5\xb5\xb5\r\n1'
>>> s = b.decode('unicode_escape')
>>> s
'µµµµ\r\n1'
>>> print(s)
µµµµ
1