鱼C论坛

 找回密码
 立即注册
查看: 1854|回复: 2

[已解决]【求助】Python2.7里转码后依旧无法处理输入的中文和特殊字符

[复制链接]
发表于 2016-11-2 19:28:48 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
各位大神好,我是一个最近在自学python的新手,写了个抓取翻译网站结果的程序,因为涉及到中文和特殊字符于是遇到了编码的问题,看了好多资料还是搞不明白。。。代码,运行结果和问题如下:
  1. # -*- coding:utf-8 -*-
  2. import lxml
  3. import urllib2
  4. import urllib
  5. from lxml import etree

  6. while True:
  7.     content = raw_input(u'你想翻译啥:')

  8.     if content == 'quit':
  9.         break
  10.     print content
  11.    
  12.     print type(content)
  13.    
  14.     url = 'http://www.godic.net/'
  15.     data = {}
  16.     data['inputword']= content.encode('utf-8')
  17.     data['recordid']=''
  18.     data['forcecg']='false'
  19.     data['cgformidx']='0'
  20.     datas = urllib.urlencode(data).encode('utf-8')

  21.     response = urllib2.urlopen(url,data=datas)

  22.     html = response.read().decode('utf-8')
  23.     a = etree.HTML(html)
  24.     shuchu = a.xpath('//*[@id="ExpFCChild"]/text()|//*[@id="ExpFCChild"]/*[@class="exp"]/text()|//*[@id="ExpFCChild"]/*[@class="cara"]/text()')
  25.     b = ''
  26.     for each in shuchu:
  27.         b = b+each+'\n'
  28.     print b         
复制代码


当输入正常英文字母组成的单词时比如‘Tag’可以正常返回结果,输入中文比如‘天’也可以正常运行,但是因为这是个德语翻译网站,输入包含德语特殊字符的单词时比如‘schön’就报错了,如下:
  1. >>>
  2. RESTART: C:\Users\Administrator.wm-201606302307\Desktop\python2.7\shiyan.py
  3. 你想翻译啥:tag
  4. tag
  5. <type 'str'>
  6. m. (-[e]s,-e)
  7. 1.天,日子
  8. 2.白天
  9. 3.Tag für Tag 日复一日
  10. 4.von Tag zu
  11. Tag 一天天,逐渐
  12. 5.Guten Tag 你好(白天用)
  13. Tag
  14. m.-(e)s,-e白天;gutenTag!(白天)好!

  15. 你想翻译啥:天

  16. <type 'unicode'>

  17. 1.  Himmel m.; 2.  oben; 3.  Tag; 4.  Jahreszeit f.; 5.  Wetter n.

  18. 你想翻译啥:sch&#246;n
  19. sch&#246;n
  20. <type 'str'>

  21. Traceback (most recent call last):
  22.   File "C:\Users\Administrator.wm-201606302307\Desktop\python2.7\shiyan.py", line 19, in <module>
  23.     data['inputword']= content.encode('utf-8')
  24. UnicodeDecodeError: 'ascii' codec can't decode byte 0xf6 in position 3: ordinal not in range(128)
  25. >>>
复制代码


我觉得问题主要在 data['inputword']= content.encode('utf-8') 这一句,最后加上.encode('utf-8')时,输入中文不会报错,特殊字符会报错,去掉.encode('utf-8')时输入特殊字符倒是不会报错了,但是输入中文会报错,而且不报错返回的结果也都是空白真的是快疯了,请各位大神指导一下如何正常处理各种字符~~
最佳答案
2016-11-3 08:29:07
用 python3吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2016-11-3 08:29:07 | 显示全部楼层    本楼为最佳答案   
用 python3吧
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-11-3 20:35:13 | 显示全部楼层

其实我开始自学的就是python3,自己写的代码运行也完全没问题,因为想把这段代码放在新浪云上,而新浪云只支持2.7版本的。。。害的我又开始折腾2.7的编码问题
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-5-18 08:32

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表