2017-09-13 40 views
2

私は関数convert()を作成しました。これはpdfをhtmlに変換し、htmlを文字列として出力します。 私は:ファイルに書き込むことはできませんが、テキストに書き込むことができます

print(convert()) 

それは動作しますが、私は結果をファイルに書き込みしようとすると:

f.write(convert()) 

を私が手:pycharm

UnicodeEncodeError: 'charmap' codec can't encode character '\ufb01' in position 978: character maps to <undefined> 

を私のプロジェクトエンコーダが設定されていますUTF-8に、私は

# -*- encoding: utf-8 -*- 
0123を持っています

ファイルの先頭に。なぜ私はこのエラーが発生するかについての任意のアイデアですか?

+0

'f.write(convert()。encode( 'utf-8'))' – Hackerman

答えて

2

Pythonのバージョンでは違いがあります。ここではPython 3.6です:

Python 3.6.2 (v3.6.2:5fd33b5, Jul 8 2017, 04:57:36) [MSC v.1900 64 bit (AMD64)] on win32 
Type "help", "copyright", "credits" or "license" for more information. 
>>> print('\ufb01') 
fi 
>>> with open('out.txt','w') as f: 
... f.write('\ufb01') 
... 
Traceback (most recent call last): 
    File "<stdin>", line 2, in <module> 
    File "D:\dev\Python36\lib\encodings\cp1252.py", line 19, in encode 
    return codecs.charmap_encode(input,self.errors,encoding_table)[0] 
UnicodeEncodeError: 'charmap' codec can't encode character '\ufb01' in position 0: character maps to <undefined> 

この場合の理由は、Windows上のPython 3.6は、Unicode APIを使用してコンソールに書き込み、それがうまく機能しています。デフォルトのエンコーディングでファイルを開くと、自分のシステム上でコードページ1252が使用されます。このコードページは、書き込まれたUnicode文字をサポートしていません。すべてのUnicode文字をサポートするエンコードを使用してください:

>>> with open('out.txt','w',encoding='utf8') as f: 
... f.write('\ufb01') 
... 
1 
関連する問題