The received bytes have to be decoded with the correct character encoding to be interpreted as text:
import urllib.request
response = urllib.request.urlopen("<http://stackoverflow.com/>")
data = response.read()
encoding = response.info().get_content_charset()
html = data.decode(encoding)
import urllib2
response = urllib2.urlopen("<http://stackoverflow.com/>")
data = response.read()
encoding = response.info().getencoding()
html = data.decode(encoding)