首页 > 技术文章 > Python扩展之编码转换

guokev 2017-05-14 19:51 原文

Windows终端输出中文问题:

#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "中文"
print(s1)

上面的代码指定了字符编码为 UTF-8 ,但是在 windows 上的 Dos命令行窗口 执行这个脚本时,输出的不是中文,而是乱码。

C:\Users\Administrator>python D:/1.py
涓枃

这是因为我们输出的是 UTF-8 的格式的,但是 Dos命令行窗口 是以 GBK 的格式去显示的,所以输出的中文是乱码。

为了能够输出中文,可以把 UTF-8 编码转换成 GBK 编码。

过程:先把 "utf-8" 解码成 unicode ,在把 unicode 编码成 GBK

#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "中文"

# 先通过 "decode" 将 "utf-8" 解码成 "unicode" , 解码需要指定原来是什么编码.
s2_unicode = s1.decode("utf-8")

# 在通过 "encode" 将 "unicode" 编码成 "gbk" , 编码需要指定要变成什么编码.
s3_gbk = s2_unicode.encode("gbk")
print(s3_gbk)

运行结果:

C:\Users\Administrator>python D:/1.py
中文

还有一种方法:

可以把 UTF-8 解码成 unicode ,然后 windows 的终端会自动将 unicode 转换成 GBK

#!/usr/bin/env python
# -*- coding:utf-8 -*-
s1 = "中文"
s1_unicode = s1.decode("utf-8")

# 输出时会转换成 "gbk" 编码
print(s1_unicode)

运行结果:

C:\Users\Administrator>python D:/1.py
中文

注:上面使用的Python版本是 Python 2.7.2

C:\Users\Administrator>python -V
Python 2.7.2

在Python3.5之后,就对上面的整个过程做了一个优化,如果是 UTF-8 的编码可以直接将它转成 GBK 的编码,不用先主动转换成 unicode 了,而是Python内部给你进行转换。

注:Python3中移除了 unicode 类型。

推荐阅读