繁体   English   中英

subprocess.call的Python unicode问题

[英]Python unicode issue with subprocess.call

我的解析器函数使用lxml并提供了一个unicode字符串列表( book_list )。

字符串连接在一起成为文件名,清理后通过subprocess.call传递给另一个继续工作的二进制文件。

我的问题是unicode对象(例如title_name = u'Wunderlicher Traum von einem gro\\xdfen Narrennest' )在ISO-8859-2中编码(至少那是'chardet'告诉我的),我需要将它们转换为格式,在文件系统级别上正确显示。 当前代码导致文件名为u'Wunderlicher Traum von einem gro\\xc3\\x9fen Narrennest'

有谁知道我做错了什么?

一些信息:

  • sys.getdefaultencoding()返回ascii ,这让我感到困惑,因为理论上不应该允许任何特殊字符,如äöü等。
  • OS X 10.9,Python 2.7.5

def convert_books(book_list, output_dir):
    for book in book_list:
        author_name = book[0][0]
        title_name = book[0][1]
        #print chardet.detect(title_name)
        #print type(title_name)
        #print title_name.decode('iso-8859-2')
        year_name = "1337"

        output_file = u"%s - %s (%s).pdf" % (author_name, title_name, year_name)
        keep_characters = (' ', '.', '_')
        output_file.join(c for c in output_file if c.isalnum() or c in keep_characters).rstrip()
        path_to_out = "%s%s" % (output_dir, output_file)

        target_file = WORK_DIR + book[1].replace(".xml", ".html")

        engine_parameter = [
            WKHTMLTOPDF_BIN,

            # GENERAL
            "-l", # lower quality
            "-L", "25mm",
            "-R", "25mm",
            "-T", "25mm",
            "-B", "35mm",
            "--user-style-sheet", "media/style.css",

            target_file,
            path_to_out,
        ]
        print "+ Creating PDF \"%s\"" % (output_file)
        call(engine_parameter)

写下问题后,发出的原因要明确:)

  • \\xdf是UTF-8
  • \\xc3\\x9f是ISO-8859-1或latin-1

我所要做的就是将utf-8对象转换为latin-1对象,然后将参数传递给subprocess.call。

out_enc = 'latin-1'
engine_parameter = [arg.encode(out_enc) if isinstance(arg, unicode) else arg for arg in engine_parameter]
call(engine_parameter)

希望这会让别人头疼!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM