2

我有一个名称以“gbk”编码的目录列表,例如:

dirs
  |- b'\xb6\xb0'/
  |- b'\xc1\xb1'/
  |- b'\xc9\xdd'/

但是,当我使用时os.listdir()返回一个 str 列表,如下所示:

["b'\\xb6\\xb0'", "b'\\xc1\\xb1'", "b'\\xc9\\xdd'"]

如何将字符串转换为字节并对其进行解码以获取原始字符?我试过了str.encode.decode,但还是不行。

谢谢。

4

1 回答 1

1

您已使用对象的字符串表示形式bytes作为目录名称,而不是使用编码字节字符串作为名称来创建目录。要撤消掠夺,您可以在这种特殊情况下使用ast.literal_eval()评估字符串表示,然后解码结果bytes对象:

import os
import ast

dirs = [ast.literal_eval(d).decode('gbk') for d in os.listdir(...)]

请注意,ast.literal_eval()此处仅用于恢复目录名称,您应该正确地重新创建它们;换句话说,它们一开始就不应该以这种方式创建。

于 2018-06-05T08:59:44.957 回答