【问题标题】:How to convert a "raw" string into a normal string?如何将“原始”字符串转换为普通字符串?
【发布时间】:2014-08-06 04:53:36
【问题描述】:

在 Python 中,我有一个这样的字符串:

'\\x89\\n'

如何将其解码为普通字符串,例如:

'\x89\n'

【问题讨论】:

    标签: python string python-3.x rawstring


    【解决方案1】:

    如果你的输入值为str字符串,使用codecs.decode()进行转换:

    import codecs
    
    codecs.decode(raw_unicode_string, 'unicode_escape')
    

    如果您的输入值是bytes 对象,则可以使用bytes.decode() method

    raw_byte_string.decode('unicode_escape')
    

    演示:

    >>> import codecs
    >>> codecs.decode('\\x89\\n', 'unicode_escape')
    '\x89\n'
    >>> b'\\x89\\n'.decode('unicode_escape')
    '\x89\n'
    

    Python 2 字节字符串可以使用'string_escape' 编解码器进行解码:

    >>> import sys; sys.version_info[:2]
    (2, 7)
    >>> '\\x89\\n'.decode('string_escape')
    '\x89\n'
    

    对于 Unicode 文字(带有 u 前缀,例如 u'\\x89\\n'),请使用 'unicode_escape'

    【讨论】:

    • 这在 python3 中不起作用。 (str 没有 decode 方法,string_escape 也不再是有效的编码)。
    • @Bakuriu:OP 从未指定 Python 版本
    • 是的,你是对的,我试图解码的是字节类对象,而不是 str 对象!
    • @user486005:这是至关重要的信息;我不得不假设您使用的是 Python 2(从统计学上讲,这仍然是更可能的选择)。我已经更新了我的答案以包含在 Python 3 中使用的正确方法。
    • @MartijnPieters 我不知道python-3已经删除了字符串对象的解码方法,起初我以为它是一个字符串对象,而它确实是一个字节对象,所以它只是发生了成功运行。非常感谢。
    【解决方案2】:

    这适用于 Python 3:

    b'\\x89\\n'.decode('unicode_escape')
    

    【讨论】:

    • @user486005:我很高兴它有帮助。它是作为 Martinj Python 2 解决方案的补充。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多