被 python 的编码问题折腾死了

2016-01-18 18:36:01 +08:00
 Yourdaye

python2.7+ubuntu

用 beautifusoup 来解析一个网页,死活都输出不了中文

什么 encode,decode 试了个遍都不行啊

折腾了一下午.....

有过类似经验的 V 友们给点指导啊!

6486 次点击
所在节点    Python
50 条回复
bakabie
2016-01-18 19:10:31 +08:00
检查下 ide 的编码设置是否正确。。。
我之前也是这样,在 pycharm 上无法输出中文。。。结果发现是 pycharm 内置编码没设置正确
flyer103
2016-01-18 19:15:47 +08:00
黑魔法:

```python
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
```
yunying
2016-01-18 19:18:42 +08:00
不谢:
http://wklken.me/posts/2013/08/31/python-extra-coding-intro.html

看完后并理解后你就会感谢我的了
Yourdaye
2016-01-18 19:26:36 +08:00
@bakabie 我是现在 pycharm 上测试,然后再服务器上测试,都不行
DuckJK
2016-01-18 19:27:55 +08:00
windfarer
2016-01-18 19:28:01 +08:00
先看网页的编码是什么,再在代码里做相应 decode
just1
2016-01-18 19:38:01 +08:00
encode('utf-8').decode('unicode-escape')
送你神器
zaishanfeng
2016-01-18 19:42:55 +08:00
楼上的几个方法我都用过 还是有问题 目前遇到的最好的解决方法是 django 的 smart_str
RqPS6rhmP3Nyn3Tm
2016-01-18 19:57:38 +08:00
为什么不用 Python 3 呢,原生支持 utf-8
抓网页直接 decode('utf-8') 就好了
leavic
2016-01-18 20:09:07 +08:00
@Yourdaye pycharm 默认的 console encoding 是 UTF-8 ,而其他系统的的 console 不一定是这个,所以 console 输出的问题不是单纯靠编码能解决的。
Yourdaye
2016-01-18 21:15:19 +08:00
@BXIA 2 和 3 的这个坑难道填不平了?
Yourdaye
2016-01-18 21:18:10 +08:00
@zaishanfeng 可惜我用的是 flask
lcj2class
2016-01-18 21:20:30 +08:00
RqPS6rhmP3Nyn3Tm
2016-01-18 21:20:51 +08:00
@Yourdaye 没用过 2 ,不过现在都在慢慢迁移到 3 了,以后可能也不会填坑了吧
crayhuang
2016-01-18 21:38:21 +08:00
同样被折腾过,用了跟二楼一样的方法解决
fy
2016-01-18 22:04:16 +08:00
1. 楼主你别用 urllib ,换 requests , resp.text 直接是 unicode , py2 py3 直接 print 都能看
2. 上 Python3 , py2 我们别管了
Victor215
2016-01-18 22:25:17 +08:00
用 requests + chardet, 爬虫包治百病!
knightdf
2016-01-18 22:40:39 +08:00
全部用 unicode
yaozeyuan93
2016-01-18 22:42:09 +08:00
先不用管 encode/decode 的事。

在程序开始时将编码设成 utf-8

```
import sys
reload(sys)
sys.setdefaultencoding('utf-8')
```

代码里凡是涉及到字符串的,一律使用 u''字符串。

对于外部输入,一律使用 decode 处理成 unicode 字符,确保程序内部是一个纯净的 unicode 字符环境

输出时,视情况 encode 成 utf-8 的 bytes 或者直接输出(让 python 系统自行处理)。

只要做到这些,一般就不会再碰见乱码问题了。

创意来源: Pycon2012 演讲, Unicode 之痛。中文翻译: https://github.com/PyCodersCN/PyCodersCN/blob/6d0c0607dfa609c443eaea5904789cf833ebc679/issue5/unipain.rst

我在自己的知乎助手( py2.7+urllib2+BS4 )里试了一下,很好用。目前为止还没有人向我反馈过乱码 bug
weakiwi
2016-01-18 22:48:17 +08:00
有时候是 ide 自己的问题,建议直接 linux 环境 nano

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

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

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

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

© 2021 V2EX