2016-03-03 4 views
1

Я понимаю, что .encode('utf-8') необходим.Как я могу избежать явного декодирования контента?

# -*- coding: utf-8 -*- 
import urllib2 
url = u'https://fr.wikipedia.org/wiki/Nîmes' 
response = urllib2.urlopen(url.encode('utf-8')) 
content = response.read().decode('utf-8') 
print type(content) 

Но как мне избежать .decode('utf-8')? В конце концов, страница, о которой идет речь, правильно объявляет ее кодировку в заголовке.

ответ

1

Вы можете использовать requests:

# -*- coding: utf-8 -*- 

import requests 
url = u'https://fr.wikipedia.org/wiki/Nîmes' 
response = requests.get(url) 
content = response.content 
text = response.text 
assert type(content) == str 
assert type(text) == unicode 
0

Как вы говорите, в вашем вопросе, вы можете получить кодировку из заголовков, чтобы избежать жесткого кодирования кодирования:

content = response.read().decode(response.headers.getparam('charset')) 
+0

Мне нравится минимальные API-интерфейсы, но это делает urllib2 довольно неполным API. – Calaf

Смежные вопросы