用字节串中的单反斜杠替换双反斜杠

Replace double backslash with single backslash in bytestring

我已经将我的数据存储在 SAP HANA 中:b'\xa2ac\xa0av\xf6' of <class 'bytes'>,但是当我使用 pyHDB 查询它时,结果转义了反斜杠:b'\xa2ac\xa0av\xf6' <class 'bytes'>

如何将数据类型保留为字节但删除双反斜杠?我已经看过将它变成一个字符串并替换反斜杠,然后将它转换回字节,但是一旦我将它转换回字节,双反斜杠又出现了。我正在使用 Python3。谢谢!

这个可行,但我不确定它是否非常优雅。

import ast

def remove_double_backslashes(b):
    return ast.literal_eval(str(b).replace('\\', '\'))

如果您使用的是比 3.2 更旧的 Python 版本,您可能需要将 ast.literal_eval 替换为 eval。那个内置函数 有时 是危险的,但是作为一个业余程序员,我想不通为什么 eval(str(b)),其中 b 是一个字节对象,可以做到任何伤害。您甚至可以验证 b 是一个带有 assert type(b) == bytes.

的字节对象

(顺便说一句,我不知道什么是SAP HANA或pyHDB,但我想我还是回答了问题)

EDIT/NOTE:

如果有人决定重新定义名称 bytes 以表示其他含义,即使 assert type(b) == bytes 也无法避免伤害,例如:

class Foo:
    def __init__(self):
        self.oro = 0

    def __repr__(self):
        return "open('file', 'wb')" # DON'T DO THIS...

bytes = Foo # DON'T DO THIS...