2023-12-31 17:48:13 | 我爱编程网
python 中的
unicode
是让人很困惑、比较难以理解的问题. 这篇文章 写的比较好,
utf-8是 unicode的一种实现方式,unicode、gbk、gb2312是编码字符集.
Python 默认脚本文件都是 ANSCII 编码的,当文件 中有非 ANSCII 编码范围内的字符的时候就要使用" 编码指示 "来修正一个 module 的定义中,如果.py文件中包含中文字符(严格的说是含有非anscii字符),则需要在第一行或第二行指定编码声明: # -*- coding=utf-8 -*- 或者 #coding=utf-8
其他的编码如:gbk、gb2312也可以;否则会出现:
先说一下python中的字符串类型,在python中有两种字符串类型,分别是 str 和 unicode ,他们都是basestring的派生类;
在str的文档中有这样的一句话:
也就是说在读取一个文件的内容,或者从网络上读取到内容时,保持的对象为str类型;如果想把一个str转换成特定编码类型,需要把str转为Unicode,然后从unicode转为特定的编码类型如:utf-8、gb2312等。
unicode 转为 gb2312,utf-8等,使用 encode(encoding)
utf-8,GBK转换为 unicode 使用 unicode(s,encoding) 或者 s.decode(encoding)
普通的 str 转为 unicode,
如果直接执行s.encode('gb2312')会发生什么?
这里会发生一个异常:Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding 是 ANSCII,如果 s 不是这个类型就会出错。
拿上面的情况来说,我的 sys.defaultencoding 是 anscii,而 s 的编码方式和文件的编码方式一致,是 utf8 的,所以出错了:
对于这种情况,我们有两种方法来改正错误:
s = '中文'
s.decode('utf-8').encode('gb2312') ```
import sys
reload(sys) # Python2.5 初始化后会删除 sys.setdefaultencoding 这个方法,我们需要重新载入
sys.setdefaultencoding('utf-8')
str = '中文'
str.encode('gb2312')
print open("Test.txt").read()
import codecs
print open("Test.txt").read().decode("utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in
print open("Test.txt").read().decode("utf-8")
UnicodeEncodeError: 'gbk' codec can't encode character u'\ufeff' in position 0: illegal multibyte sequence
import codecs
data = open("Test.txt").read()
if data[:3] == codecs.BOM_UTF8:
data = data[3:]
print data.decode("utf-8")
s = "中文"
print unicode(s, "utf-8")
Traceback (most recent call last):
File "ChineseTest.py", line 3, in
s = unicode(s, "utf-8")
UnicodeDecodeError: 'utf8' codec can't decode bytes in position 0-1: invalid data
s = "中文"
print unicode(s, "gbk")
s = "中文"
print unicode(s, "cp936")
简述:
coding声明,实际上没有其他对应的效果
python文件的实际编码,决定了你代码中写的中文的所采用的编码(是gbk还是utf-8还是其他)
将utf-8的中文直接输出到gbk的cmd的中,则必然会报错
详解:
之前就写过类似教程了,尤其适合你这样的人去看。我爱编程网
此处不给贴地址,自己google搜标题即可找到:
Python专题教程:字符串和字符编码
中的:
【整理】Python中用encoding声明的文件编码和文件的实际编码之间的关系
以及:
【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法
看后,就明白了基本的错误的原因和解决办法了。
当前,如果本身对于python字符的概念不熟悉,则可以去看:
【整理】Python中字符编码的总结和对比:Python 2.x的str和unicode vs Python 3.x的bytes和str
其实,其他还有很多相关的教程呢。
不贴了,否则又有人会说我瞎推荐了。
剩下就等你们自己发现我写的帖子,是不是值得你们看吧。
如果值得看,也还是让你们自己去找吧。
Python有很多第三方安装包,大多都不能直接支持中文编码。作为开发环境的PyCharm有必要单独现身说法。
PyCharm配置
PyCharm默认Python脚本编码是UTF-8,我们将其设置为GBK: 进入filesetting,在输入框搜索encoding
保存设置并重启PyCharm,这样默认编码就生效了,可在右下角查看
Python 2
笔者使用的Python版本是2.7.11。Python 2 的中文支持需要做两件事: ①在代码前端增加代码: # -*-coding:gbk-*- ②在中文前加u前缀,如: u"你好"
运行代码,检查是否已成功支持中文字符
Python 3
笔者使用的Python版本是3.5.1。Python 3 的中文支持只需要做一件事即可: ①在代码前端增加代码: # -*-coding:gbk-*-
2023-12-26 12:43:58
2023-12-23 12:08:32
2023-09-13 13:02:53
2023-12-28 16:34:59
2023-12-27 17:16:46
2023-12-27 07:23:25