【问题标题】:Python3: split encoded stringPython3:拆分编码字符串
【发布时间】:2020-12-01 22:46:41
【问题描述】:

我有

b'path\n/sync/u/0/i/bv\nurl_ids_md5\n\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0\nargcount\n2\nstart_time\n1605232804\narg.c\n10\narg.hl\n11\n'

其中包含以下元素:

 1) "path"
 2) "/sync/u/0/i/bv"
 3) "url_ids_md5"
 4) "\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0"
 5) "argcount"
 6) "2"
 7) "start_time"
 8) "1605232804"
 9) "arg.c"
10) "10"
11) "arg.hl"
12) "11"

我正在尝试将其分解为一个列表,其中包含由“\n”分隔的元素。但是,会出现几种情况:

我们把有问题的字符串称为 s。

如果我天真地执行 s.split("\n"),那当然是行不通的,我会遇到以下错误:

TypeError: a bytes-like object is required, not 'str'

然后我在尝试拆分之前 decode():s.decode().split("\n")。这样做的问题是我有一个 md5 编码的组件作为 s 的一部分,它与 decode() 的默认 utf-8 解码不兼容。

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xd9 in position 32: invalid continuation byte

接下来(而不是 decode())我尝试将 str() 应用于 s。我得到以下信息:

b'path\n/sync/u/0/i/bv\nurl_ids_md5\n\xd9\xdd\x80fF>(\xf4?\xcc\x86c|\xd2\xd3\xf0\nargcount\n2\nstart_time\n1605232804\narg.c\n10\narg.hl\n11\n'

(请注意,它仍然是 utf-8 编码的(我认为),前面的 b' 证明了这一点。) 有趣的是,在上面做 .split("\n") 的结果如下:

["b'path\\n/sync/u/0/i/bv\\nurl_ids_md5\\n\\xd9\\xdd\\x80fF>(\\xf4?\\xcc\\x86c|\\xd2\\xd3\\xf0\\nargcount\\n2\\nstart_time\\n1605232804\\narg.c\\n10\\narg.hl\\n11\\n'"]

这对我来说本身没有意义。 (但请注意,它允许我现在执行 .split(),而不是我的原始字符串/第一个示例)

如何正确拆分字符串?

【问题讨论】:

    标签: python python-3.x string split


    【解决方案1】:

    尝试执行以下操作:

    s.split("\n".encode())
    

    祝你好运!

    【讨论】:

    • 好主意!谢谢。
    猜你喜欢
    • 2011-08-13
    • 2021-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多