正则表达式 - Python 3.5 如何对中文字符串进行处理?
高洛峰
高洛峰 2017-04-17 17:35:18
[Python讨论组]

python初学者,写一个简单的爬虫程序,在处理标题的时候遇到的问题
按照网文的写法,好像应该先

txt = "大家好我叫123abc"
str1 = txt.decode('gb2312')
str2 = str1.encode('utf-8')

但是编译结果显示
AttributeError: 'str' object has no attribute 'decode'
查过文档后也没有关于decode的定义

请问大家,在这个版本的Python中,对于中英数字混杂的字符串怎样处理?

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(9)
天蓬老师

str 类型只有 encode 方法, bytes 类型只有 decode 方法。
爬虫爬下来的文本假设为 txt
试一试 txt.decode('utf-8') 或者 txt.decode('gb2312')

大家讲道理

首先需要encode 才能decode

天蓬老师

bytes(str, 'gb2312')

怪我咯

Python 3.5 字符串都是 Unicode 格式。

https://segmentfault.com/a/1190000004613...
https://segmentfault.com/a/1190000004625...

ringa_lee

爬虫得到的应该是bytes型的吧,直接建立的变量是str型的了。bytes类型的通过decode转换成str类型进行处理,然后输出的话再通过encode转换成bytes类型。

天蓬老师

字符串有encode方法,使用txt.encode("utf_8")将字符串编码为byte类型,byte有decode方法,可以将byte解码。如:txt.encode("utf_8")--> b'\xe5\xa4\xa7\xe5\xae\xb6\xe5\xa5\xbd\xe6\x88\x91\xe5\x8f\xab123abc',之后再使用decode,可以重新获得文本"大家好我叫123abc"。

黄舟

处理的目的是什么?中英文混杂也只是普通字符串,不需要特殊处理。
Python3的普通字符串是str类型,实际上就是Python2的unicode类型。
要真正理解清楚这个问题,需要看一看字符编码的知识,理解unicode编码方式和实现方式的关系。
粗略的说,Python3使用的str类型并不关心你最终是什么编码,是gb2312还是utf-8,它只是用unicode的字符集编码来表示每一个字符,直到输出到文件流,需要转换为bytes类型时,才用encode指定具体的编码实现方式。

在Python3里,str --encode--> bytes --decode--> str

伊谢尔伦

import sys

reload(sys)
sys.setdefaultencoding('UTF-8')

伊谢尔伦

你好!可以这样写:

txt.encode('utf-8').decode('utf-8')
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号