求助:被 python 的编码搞疯了

2016-06-04 11:15:44 +08:00
 lovebeyondalways

小弟用的是 python3.5 ,听说 python3 解决了编码问题
然而
import urllib.request
html = urllib.request.urlopen('http://www.baidu.com').read().decode('utf-8')
print(html)

结果:
Traceback (most recent call last):
File ".\Desktop\work\wearther.py", line 3, in <module>
print(html)
UnicodeEncodeError: 'gbk' codec can't encode character '\xbb' in position 25395: illegal multibyte sequence

这样也不行.decode('utf-8').encode('utf-8')
所以新手求助啊

9523 次点击
所在节点    Python
45 条回复
hard2reg
2016-06-04 14:34:13 +08:00
请用 requests
hard2reg
2016-06-04 14:37:43 +08:00
你抓 QQ 空间更恶心,有些 emoji 表情也会导致错误。。。
ayaseangle
2016-06-04 14:40:04 +08:00
这是 cmd 的坑。。。
dofine
2016-06-04 15:09:12 +08:00
print 和 cmd 都很坑~~
vinceguo
2016-06-04 15:33:47 +08:00
别改 defaultencoding 。
here you go: bit.ly/unipain
YUX
2016-06-04 16:00:09 +08:00
import sys
import io
sys.stdout = io.TextIOWrapper(sys.stdout.buffer, encoding='utf-8')

在 python3 前面加上这三行就没有编码问题了
ioven
2016-06-04 18:13:46 +08:00
win 的坑,而非 py 坑
个人解决方法,使用 conemu[https://conemu.github.io],开启 unicode 支持,运行 lz 代码无压力
singer
2016-06-04 20:28:48 +08:00
weizhixiang
2016-06-04 21:25:31 +08:00
win 的坑,首行加入#ciding=utf-8
weizhixiang
2016-06-04 21:26:06 +08:00
@weizhixiang coding
noe132
2016-06-05 00:39:33 +08:00
最新版本 Sublime 的 built in 的 python 的 build system 是这样写的
{
"shell_cmd": "python -u \"$file\"",
"file_regex": "^[ ]*File \"(...*?)\", line ([0-9]*)",
"selector": "source.python",

"env": {"PYTHONIOENCODING": "utf-8"},

"variants":
[
{
"name": "Syntax Check",
"shell_cmd": "python -m py_compile \"${file}\"",
}
]
}


其中有个
"env": {"PYTHONIOENCODING": "utf-8"},
添加一个这个环境变量
好像这样就不会出现 unicode 错误了
youtoshell
2016-06-05 01:24:12 +08:00
reload(sys)
sys.setdefaultencoding('utf-8')
Ciruelas
2016-06-05 05:03:07 +08:00
不知道你解决这个问题了没有,我前两天刚好碰到类似的问题。报这个错是因为控制台使用的是 gbk 编码,要么把控制台改成 utf8 编码,要么把输出内容 decode 以后再 encode 成 gbk
binux
2016-06-05 05:18:49 +08:00
python 编码其实并不是坑, python2 也不是,只是觉得坑的人不理解编码是什么东西。 encode , decode 乱用,没有依据地胡乱指定编码。
9hills
2016-06-05 08:35:35 +08:00
同意 ls ,反对 reload(sys)

Python 的编码并不难理解,你只要理解 Unicode , GBK , UTF-8 , encode , decode 的含义即可。如果你使用 Windows ,需要知道 windows 的代码页是什么, CP936 是啥
lovebeyondalways
2016-06-05 08:58:23 +08:00
@9hills 我靠…一大早又有那么多 v 友帮忙,非常感谢,我把 cmd 改成 utf-8 可以运行,现在在补充 Unicode 知识
kysida
2016-06-05 10:29:23 +08:00
一般这种问题是编码问题,这类问题可以直接尝试着使用 utf-8 , unicode 确实很重要
imn1
2016-06-05 10:33:27 +08:00
看上去像是 win
win 首先要明白一个问题: cmd 默认编码不是 utf-8 ,无论怎么改只要 py 和 cmd 编码不同,输出就一定会出错
wwqgtxx
2016-06-05 10:58:33 +08:00
win 下这样输出也能搞定所有问题
print (((str(input))).encode('gbk', 'ignore').decode('gbk') )
knarfeh
2016-06-05 14:45:35 +08:00
授人以鱼不如授人以渔: <amp-youtube data-videoid="sgHbC6udIqc" layout="responsive" width="480" height="270"></amp-youtube>&feature=youtu.be

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/283428

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX