2010-09-27 6 views
4
browser = mechanize.Browser() 
page = browser.open(url) 
html = page.get_data() 

print html 

Il montre des caractères étranges. Je suppose que c'est une chaîne UTF-8 mais Python ne le sait pas et ne peut pas le montrer correctement.Problème de codage lors du téléchargement du code HTML en utilisant mechanize et Python 2.6

Comment puis-je convertir cette chaîne en chaîne unicode comme

u = u'test' 
+0

Dites-nous l'URL ou quelques-uns des personnages étranges qui apparaissent sur la page. À partir de votre 'UnicodeDecodeError', le document n'est certainement pas correct UTF-8. – AndiDog

Répondre

4

Il a été gzippés

def ungzipResponse(r,b): 
    headers = r.info() 
    if headers['Content-Encoding']=='gzip': 
     import gzip 
     gz = gzip.GzipFile(fileobj=r, mode='rb') 
     html = gz.read() 
     gz.close() 
     headers["Content-type"] = "text/html; charset=utf-8" 
     r.set_data(html) 
     b.set_response(r) 

response = browser.open(url) 
ungzipResponse(response, browser) 
html = response.read() 
+0

Selon ce que vous essayez de faire, vous devriez vraiment utiliser une bibliothèque existante qui gère les choses de bas niveau comme ça pour vous. – AndiDog

+0

J'ai essayé de trouver comment le rendre plus facile, mais il semble que la solution la plus simple. – luchaninov

+0

il erreur de retour 'KeyError: 'content-encoding'' – hh54188

1
u = html.decode('utf-8') 
+0

UnicodeDecodeError: le codec 'utf8' ne peut pas décoder l'octet 0x8b en position 1: octet de code inattendu – luchaninov

+0

Ensuite, ce n'est pas utf-8. Vous devriez examiner les en-têtes pour voir quel jeu de caractères est retourné. –

+0

facebook.com, Content-Type: text/html; charset = utf-8 – luchaninov

1

vous devez définir l'encodage comme:

#!/usr/bin/python 
# -*- coding: iso-8859-15 -*- 

mécaniser en a besoin.

pour plus d'informations, consultez ceci http://www.python.org/dev/peps/pep-0263/

+0

Il était déjà là: # - * - codage: utf-8 - * - – luchaninov

+0

mais vous avez besoin de: # - * - codage: iso-8859-15 - * - pas # - * - codage: utf-8 - * - - –

Questions connexes