我想把python3中的b'\xc2\xa0\x38'
转换成{
b'\xc2\xa0\x38'.replace(u'\xc2\xa0',"")
b'\xc2\xa0\x38'.replace(u'\xc2a0',"")
TypeError: a bytes-like object is required, not 'str'
在网页中,c2 a0
表示unicode点为U+00A0的不间断空格。在
注意:c2a0
不可打印,字符列在此为空。在
relationship on unicode point,character,utf-8
如何用replace方法将b'\xc2\xa0\x38'
转换成{
由于} 。虽然这两种类型的外观和行为非常相似,但它们仍在不同类型上运行:
b'\xc2\xa0\x38'
是bytes object,因此不能对其使用字符串方法。所以当你调用.replace()
时,你不是在调用str.replace
,而是^{
^{pr2}$str.replace
用另一个字符串中的子串替换。并且bytes.replace
用testring内的testring替换一个sub-bytestring。所以所有参数的类型总是匹配的:因此,为了替换字节字符串中的某些内容,需要传递bytes对象:
你们总不能那样做。}都是相同的:
b'8'
和{两者都包含相同的单字节值}来引用十进制值为10的相同的
0x38
。只是在Python中有多种方法可以将内容表示为字节文本。正如您可以编写10
、0xA
、0b1010
或{int
对象,您可以用多种方式描述bytes对象。在现在,当您使用交互式Python REPL时,当您只编写
b'\x38'
时,Python将解释该bytes文本,用单字节0x38创建一个bytes对象,然后REPL将输出该bytes对象的repr()
。而bytes对象的repr()恰好试图尽可能使用ASCII字母。在没有办法改变这一点,但也没有必要改变它。您看到的
b'8'
只是同一bytes对象的一个表示。如果你使用这个对象并用它做一些事情(例如,把它写到一个文件中,转换它,或者通过网络发送),那么发送的是实际的字节,而不是字节对象的一些字符串表示。在但是,如果您想实际打印bytes对象,可以使用您最喜欢的表示法将其转换为字符串。例如,如果您想要字节字符串的十六进制表示,可以使用one of the many ways来执行此操作:
你已经快到了:
数据是从文件中读取的吗?也许你以二进制模式打开了文件:
这意味着从文件中读取的数据将作为
bytes
对象返回,而不是str
。在如果是这样,请尝试以文本文件的形式打开该文件,方法是将
'rb'
模式替换为'r'
。在相关问题 更多 >
编程相关推荐