0

私のパーサー関数は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、パイソン 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)
4

1 に答える 1