我有以下功能
import urllib.request
def seek():
web = urllib.request.urlopen("http://wecloudforyou.com/")
text = web.read().decode("utf8")
return text
texto = seek()
print(texto)
当我解码为 utf-8 时,我得到带有缩进和回车的 html 代码,就像在实际网站上看到的一样。
<!DOCTYPE html>
<html>
<head>
<title>We Cloud for You |
如果我删除.decode('utf8')
,我会得到代码,但缩进消失了,它被\n
.
<!DOCTYPE html>\n<html>\n <head>\n <title>We Cloud for You
那么,为什么会这样呢?据我所知,当您解码时,您基本上是将一些编码字符串转换为 Unicode。
我的 sys.stdout.encoding 是 CP1252(Windows 1252 编码)
根据这个线程:当默认编码为 ASCII 时,为什么 Python 会打印 unicode 字符?
Python 将非 unicode 字符串作为原始数据输出,而不考虑其默认编码。如果终端当前的编码与数据匹配,终端恰好会显示它们。- Python 使用 sys.stdout.encoding 中指定的方案编码后输出 Unicode 字符串。- Python 从 shell 环境中获取该设置。- 终端根据自己的编码设置显示输出。- 终端的编码独立于外壳的。
因此,似乎 python 需要先读取 Unicode 中的文本,然后才能将其转换为 CP1252,然后将其打印在终端上。但我不明白为什么如果文本没有被解码,它会将缩进替换为\n
.
sys.getdefaultencoding()
返回 utf8。