免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3391 | 回复: 6

请教关于正则匹配在列表或元组中的乱码问题 [复制链接]

论坛徽章:
0
发表于 2013-07-14 12:28 |显示全部楼层
本帖最后由 avyou 于 2013-07-14 12:39 编辑

我在使用正则匹配的时候,中文在re.findall 得到的列表中出现乱码,search(...).groups 得到的元组也是一样,

但是使用for 去循环每个元素打印却是正常的,是这怎么回事呢?

我试了在 linux, windows系统, vim , pytharm, sublime 编辑器都是同样的结果,但我编码都设统一了啊。

各位大神帮帮我吧,多谢了!

代码如下:
  1. #coding:utf-8
  2. import re
  3. import sys
  4. import locale

  5. reload(sys)
  6. sys.setdefaultencoding('utf8')
  7. print sys.getdefaultencoding()

  8. print locale.getdefaultlocale()
  9. groupStr =  '<li><a href="../Special/1.Html">正版音乐库</a></li>'.decode("utf-8")
  10. reRule = re.compile(ur'<li><a href=.+?>(.+?)</a></li>')

  11. print reRule.search(groupStr).group(0)   ##中文正常
  12. print reRule.search(groupStr).group(1)   ##中文正常

  13. mgroups = reRule.search(groupStr.encode("utf-8"))   ## 中文乱码
  14. print mgroups.groups()

  15. for eachOne in mgroups.groups():     ##中文正常
  16.         print eachOne

  17. print reRule.findall(groupStr)   ##中文乱码
  18. print reRule.findall(groupStr)[0]  ##中文正常
复制代码
运行结果:
  1. utf8
  2. ('zh_CN', 'cp936')
  3. <li><a href="../Special/1.Html">正版音乐库</a></li>
  4. 正版音乐库
  5. ('\xe6\xad\xa3\xe7\x89\x88\xe9\x9f\xb3\xe4\xb9\x90\xe5\xba\x93',)
  6. 正版音乐库
  7. [u'\u6b63\u7248\u97f3\u4e50\u5e93']
  8. 正版音乐库
复制代码

论坛徽章:
0
发表于 2013-07-14 20:39 |显示全部楼层
顶一下,没有帮忙吗?

论坛徽章:
0
发表于 2013-07-15 11:10 |显示全部楼层
>>> print '\xe6\xad\xa3\xe7\x89\x88\xe9\x9f\xb3\xe4\xb9\x90\xe5\xba\x93'
正版音乐库
>>> print u'\u6b63\u7248\u97f3\u4e50\u5e93'
正版音乐库

这些并非乱码, 而是因为你打印的是一个 无组或列表对象, print 时直接输出了对象的内部表示
你使用下标取出字符串元素再输出就正常了
就像你代码中这样
print reRule.findall(groupStr)[0]  ##中文正常

论坛徽章:
0
发表于 2013-07-16 12:32 |显示全部楼层
哦,原来如此,多谢 jxing_ing 啦!

论坛徽章:
0
发表于 2013-07-16 12:50 |显示全部楼层
简答:
实际上已经是正常的字符,不是乱码,只不过是非GBK(比如UTF-8)编码字符打印到GBK中,所以才看起来以为是乱码。

详解:
这里有详尽的解释:
【已解决】BeautifulSoup已经获得了Unicode的Soup但是print出来却是乱码

论坛徽章:
0
发表于 2013-07-16 13:10 |显示全部楼层
回复 5# crifan


嗯,多谢!你的博客我经常去看哈,学习到不少呢.

论坛徽章:
0
发表于 2013-07-16 13:46 |显示全部楼层
回复 6# avyou


    有用就好,
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP