Python版本:3.5.2 我的代码:
a = b"\xff"
b = a.replace(b"f", b"d")
print(b)
我得到了b'\xff'
。我尝试了另一种方式。首先,我将字节转换为str,然后替换字符串。
a = b"\xff"
b = a.decode()
b = b.replace("f", "d")
但通过例外:
Traceback (most recent call last):
File "<input>", line 1, in <module>
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte
我不知道如何解决python3中的问题。我该怎么办?
在b"f"
没有b'\xff'
。你键入一个“f”来输入b'\xff'
,但这只是几种输入方法中的一种;该值与bytes([255])
相同。 .replace
只替换字符串中实际的字节;它不知道你是如何创建字符串的。
创建字符串后,用于创建字符串的输入方法的详细信息将消失。你不能做你想要做的事情,因为你不能做'\t'.replace('t', 'n')
得到'\n'
。 '\t'
不包含“t”;您只需键入“t”作为指定制表符的方法。
我假设你试图用f
替换\xff
中的d
来获得\xdd
。你不能使用函数string.replace()
,因为你不能调用"\t".replace("t", "n")
并获得\n
,BrenBarn已经指出了。你可以做的一件事是使用\\xff
而不是\xff
,虽然我不知道这是否适合你。这是您的代码中的样子:
a = b"\\xff"
b = a.replace(b"f", b"d")
print(b)
哪个会输出\\xdd
。如果这不是一个选项,我会建议你自己做功能。我将告诉你如何做到这一点只是为了让你走上正轨,但为了简单起见,我将假设你只处理一个字符输入。你不能简单地用f
替换d
的原因是因为首先没有实际的f
,所以你的函数必须从将字符转换为\\xff
开始。然后你会继续用f
替换d
。这是代码中的样子:
def convertHexToString(char):
return "\\x" + str(hex(ord(char)))[2:]
a = convertHexToString("\xff")
b = a.replace("f", "d")
print(b)
哪个会输出\xdd
。请注意,输出是\\xdd
而不是\xdd
,尽管它看起来像。为了把它变成那样,你必须做这样的事情:
def convertStringToHex(string):
return bytes(string, “utf-8").decode("unicode_escape")
所以,你的最终程序看起来像这样:
def convertHexToString(char):
return "\\x" + str(hex(ord(char)))[2:]
def convertStringToHex(string):
return bytes(string, "utf-8").decode("unicode_escape")
# Here we are changing the f's to d's
a = convertHexToString("\xff") # \\xff
b = a.replace("f", "d") # \\xdd
print(b)
# Here we are converting the string '\\xdd' into '\xdd'
b = convertStringToHex(b)