Python 2の "UTF-8"エンコーディングに関する議論がたくさんあることを知っていますが、私の解決策を見つけることができませんでしたこれまでの問題。私は現在、ファイルの名前を取得してxlwtにハイパーリンクするスクリプトを作成しているので、ファイルはスプレッドシートのクリックでアクセスできます。問題は、これらのファイルの名前の一部に非ASCII文字が含まれていることです。"UTF-8"の代わりにPython 2.7 "latin-1"エンコーディングを使用する
質問1
私は、ファイルの名前を取得するために、次の行を使用していました。フォルダには1つのファイルしかありません。
>>f = filter(os.path.isfile, os.listdir(tmp_path))[0]
そして
>>print f
'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc'
>>print sys.stdout.encoding
'UTF-8'
>>f.decode("UTF-8")
*** UnicodeDecodeError: 'utf8' codec can't decode byte 0xe7 in position 76: invalid continuation byte
ここでの議論を閲覧から、私は "UTF-8" エンコーディングではありません "\ XE7 \ xe3o" ことに気づきました。次の行を実行することは、この点を裏付けるようです。
>>f.decode("latin-1")
u'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc'
私の質問は、その後で、なぜF変数がでエンコードされている「Latin-1の」システムのエンコーディングを「UTF-8」に設定されていますか?
質問2
f.decode(「ラテン-1」)は、私が欲しいの出力が得られますが、私はまだスプレッドシートにハイパーリンク関数に変数を供給することができません。
>>data.append(["File", xlwt.Formula('HYPERLINK("%s";"%s")' % (os.path.join(dl_path,f.decode("latin-1")),f.decode("latin-1")))])
*** FormulaParseException: can't parse formula HYPERLINK("u'H:\\Mad Lab\\SE Doc Crawler\\bovespa\\download\\521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc's;"u'521001ldrAvisoAcionistas(Retifica\xe7\xe3o)_doc's)
明らかに、閉じる二重引用符が食べられ、「s」接尾辞で置き換えられました。誰かがここで何が起こっているのかを説明するのに役立つことができますか? 0.0
ああ、誰かが上記質問2の解決策を提案できれば、私は非常に感謝しています。あなたは私の週末を悲惨から救ったでしょう!
ありがとうございます!
ファイルシステムのエンコーディングは、常にロケール(stdoutとstdinのエンコーディング)と異なる場合があります。代わりに 'sys.getfilesystemencoding()'を見てください。 –
IDLE、PyCharm、Intellij、EclipseのようなコンソールやIDEを使用している場合は、どのオペレーティングシステムを使用しているのか教えてください。 –
@MartijnPieters sys.getfilesystemencoding()throws "mbcs" – kerwei