Python版本:3.5.2
我的代码:
a = b"\xff"
b = a.replace(b"f", b"d")
print(b)
我得到了b'\xff'
。
我尝试了另一种方式。 Fisrt,我将字节转换为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中的问题。 我该怎么办?
答案 0 :(得分:3)
b"f"
中没有b'\xff'
。你输入一个“f”进入b'\xff'
,但这只是几种输入方法中的一种;该值与例如bytes([255])
相同。 .replace
仅替换字符串中实际存在的字节;它不知道你是如何创建字符串的。
创建字符串后,用于创建字符串的输入法的详细信息将消失。由于您无法'\t'.replace('t', 'n')
获取'\n'
的相同原因,您无法执行您要执行的操作。 '\t'
不包含“t”;您只需键入“t”作为指定制表符的方法。
答案 1 :(得分:1)
我假设您尝试用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)