2017-09-13 4 views
2

J'ai créé une fonction convert(), qui convertit un fichier PDF en HTML et affiche le code HTML sous forme de chaîne. Quand je fais:Impossible d'écrire dans le fichier mais peut écrire dans le texte

print(convert()) 

Il fonctionne, mais lorsque je tente d'écrire le résultat dans le fichier:

f.write(convert()) 

Je reçois:

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

Dans pycharm mon encodeur de projet est défini à UTF-8, et j'ai un

# -*- encoding: utf-8 -*- 

Au début du fichier. Des idées sur pourquoi je reçois cette erreur?

+0

Essayez avec 'f.write (convert(). Encoder ('utf-8'))' – Hackerman

Répondre

2

La version Python fait la différence. Voici 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> 

La raison dans ce cas est Python 3.6 sous Windows écrit sur la console avec les API Unicode, il fonctionne très bien. L'ouverture d'un fichier avec l'encodage par défaut utilise la page de code 1252 sur mon système, qui ne supporte pas le caractère Unicode écrit. Utilisez un encodage qui prend en charge tous les caractères Unicode:

>>> with open('out.txt','w',encoding='utf8') as f: 
... f.write('\ufb01') 
... 
1