codecamp

Python之Win字符编码详解

Win下的dos窗口输出中文

Python2.7默认字符编码是ascii格式,即使指定字符编码为UTF-8也未必能够输出中文,测试如下:


1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">#_*_coding:utf-8_*_# 定义一个变量内容为中文,字符集为UTF-8temp = "中文"<br># 输出变量temp的内容print(temp)<br></span>

用win下的dos窗口执行这个脚本,看看输出出来的是否为中文

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">C:\Users\anshe>python F:\Python_code\sublime\Day02\print.py涓枃        #输出出来的是乱码<br></span>

这是为什么呢?其实是因为dos窗口的字符编码是GBK的(如下图),规定输出的字符集必须是GBK的,所以输出出来的中文即为乱码。

注意我是用的是Python2.7.11

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">C:\Users\anshe>python -VPython 2.7.11<br></span>

使用Pycharm或者sublimePython IDE输出中文流程

流程中文说明:
Py Scripts头部指定编码格式为UTF-8 —> IDE把默认的Ascii格式编码成UTF-8 —-> IDE终端输出中文

  • 用sublime IDE输出

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;"># _*_ coding:utf-8 _*_# 定义一个变量内容为中文,字符集为UTF-8temp = "中文"<br># 输出变量temp的内容print(temp)<br></span>

输出的内容:

既然这样,python的编码能够把ascii编码还换成UTF-8那么肯定也就可以转换成GBK编码,流程如下:

代码如下:

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;"># _*_ coding:utf-8 _*_# 定义一个变量内容为中文,字符集为UTF-8temp = "中文"<br># 解码,需要指定原来是什么编码temp_unicode = temp.decode("utf-8")<br># 编码,需要指定要转换成什么编码temp_gbk = temp_unicode.encode("gbk")<br># 输出转换成的gbk编码print(temp_gbk)<br></span>

Dos窗口执行测试:

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">C:\Users\anshe>python F:\Python_code\sublime\Day02\print.py中文<br></span>

另外一种方法:
代码:

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;"># _*_ coding:utf-8 _*_# 定义一个变量内容为中文,字符集为UTF-8temp = "中文"<br># 解码,需要指定原来是什么编码temp_unicode = temp.decode("utf-8")<br># 输出转换成的gbk编码print(temp_unicode)# Windows终端需要GBK,DOS自动转换成GBK<br></span>
1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">C:\Users\anshe>python F:\Python_code\sublime\Day02\print.py中文<br></span>

大概流程也就像下面的图一样

python3移除了unicode字符集的类型,默认使用UTF-8,还有一种也可以在dos终端输出中文的方法,代码如下:

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;"># _*_ coding:utf-8 _*_print(u"中文")<br></span>

DOs窗口输出的就是中文了,虽然我也不知道是什么意思

1
<span style="font-family:arial, helvetica, sans-serif;font-size:18px;">C:\Users\anshe>python f:\Python_code\sublime\Day02\print.py中文<br></span>


本文出自 “一盏烛光” 博客,谢绝转载!

Python流程控制
Python深浅拷贝
温馨提示
下载编程狮App,免费阅读超1000+编程语言教程
取消
确定
目录

关闭

MIP.setData({ 'pageTheme' : getCookie('pageTheme') || {'day':true, 'night':false}, 'pageFontSize' : getCookie('pageFontSize') || 20 }); MIP.watch('pageTheme', function(newValue){ setCookie('pageTheme', JSON.stringify(newValue)) }); MIP.watch('pageFontSize', function(newValue){ setCookie('pageFontSize', newValue) }); function setCookie(name, value){ var days = 1; var exp = new Date(); exp.setTime(exp.getTime() + days*24*60*60*1000); document.cookie = name + '=' + value + ';expires=' + exp.toUTCString(); } function getCookie(name){ var reg = new RegExp('(^| )' + name + '=([^;]*)(;|$)'); return document.cookie.match(reg) ? JSON.parse(document.cookie.match(reg)[2]) : null; }