python学习笔记一(python 编码)

来源:互联网 发布:js获取隐藏控件的值 编辑:程序博客网 时间:2024/06/05 11:02

从接触python开始,python的编码问题就一直困扰着我,现在总结下平时遇到的编码问题。

1、中文显示问题

对于我这种英语不好的同志来说,在python代码中写中文注释再普通不过了,这就带来了一个编码的问题。

#!/usr/bin/pythonb = '中文测试'print b

上述代码会报错:SyntaxError: Non-ASCII character '\xe4'

原因是python默认采用ASCII编码保存文件,在ASCII表中没有表示中文的字符,因此无法将中文以ASCII码的形式保存在文件中。

解决上述问题的方法是:在python文件第二行加上#coding=utf-8(gbk也行),设置文件已utf8编码格式存储。

2、str字节串和unicode混用

在很多情况下,我们会在代码中拼接字符串(包括格式化):

#!/usr/bin/python# -*- coding: utf-8 -*-b = '中文测试'c = u'test'd = b + cprint d
上述代码会报错:UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 0

原因:python遇到str对象和unicode对象时,会自动将字节串自动decode为unicode,可以等效为decode(sys.defaultencoding)。python的系统默认编码为ASCII,所以将中文的字节串以ASCII编码方式解码时会报错。

解决方法如下:

import sysreload(sys)sys.setdefaultencoding('utf-8')
设置系统的默认编码为utf-8,python自动解码时,会将中文以utf-8编码方式解码。

python写文件时,若传入write的参数是unicode,那么python同样会自动以默认编码进行编码后写入文件。
当然,python的编码问题不止这些,如果遇到相关问题,只需要保证编码流程为str->unicode->str,以unicode为中心,问题就不会太大!


(上述为个人观点,有不足之处望指出)




0 0
原创粉丝点击