Je reçois la chaîne suivante d'un site Web via mécaniser:problème UnicodeDecodeError avec mécaniser
'We\x92ve'
Je sais que \ x92 est synonyme de » caractère. J'essaye de convertir cette chaîne en Unicode:
>> unicode('We\x92ve','utf-8')
UnicodeDecodeError: 'utf8' codec can't decode byte 0x92 in position 2: unexpected code byte
Qu'est-ce que je fais mal?
Edit: La raison pour laquelle j'ai essayé 'utf-8' était le suivant:
>> response = browser.response()
>> response.info()['content-type']
'text/html; charset=utf-8'
Maintenant, je vois que je ne peux pas toujours faire confiance tête de type de contenu.
Eh bien ... vous * devriez *, en général, faire confiance à l'en-tête 'Content-Type'. Quand il y a un 'charset' déclaré, c'est le codage définitif de la page (même en remplaçant un jeu de caractères' '), et tous les navigateurs utiliseront cet encodage. Donc la page que vous allez chercher est simplement cassée; un seul octet '\ x92' apparaîtrait dans les navigateurs comme une marque' '. Il est préférable de ne pas deviner un «jeu de caractères» à moins que vous n'ayez vraiment pas d'autre choix; En règle générale, vous ne devriez revenir à un reniflement de type chardet que si aucun charset reconnu n'est déclaré. (Encore une fois, c'est ce que les navigateurs font.) – bobince
@bobince J'ai vérifié cette page dans quelques navigateurs modernes et ils montrent tous le caractère. Je suis confus. – parxier
URL? – bobince