python 编码 乱码问题 ascii unicode utf-8

基础知识部分
首先需明白python2.7默认使用的是ascii,而现在python3.x默认使用的是unicode。下面内容基于python2.7。
python2编码总结
解决python的中文字符编码问题
Python2同时输出中文和变量时中文乱码

一、文件编码

一般文件使用的是utf-8或者bgk编码进行存储。但是由于python2.7默认使用ascii,所以python2.7在运行py后缀文件时也是默认以ascii编码读取文件。如果文件中没有中文不会出现问题。但是如果有中文的话,由于中文编码超出了ascii编码范围,所以python2.7将会报错。
  所以我们需要在文件头部添加:

#coding:utf-8
或者
#!/usr/bin/python
# -*- coding: utf-8 -*-

来告诉python2.7此文件要用utf-8编码来读取。

  在文件中设置后我们可以使用 a = u'哈';python会自动使用utf-8来读取汉字,并将其转换为Unicode对象。

二、字符串编码

python2.7和字符串相关的数据类型,分别是标准字符串(str)是单字节字符序列,Unicode字符串(unicode)是双字节字符序列。。
  python的解码,编码是python自动进行的,如果我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。python2.7的函数str()和unicode()默认将对象转成ascii编码。
  但是对于中文,ascii编码是无法表示的。因此我们需要用sys.setdefaultencoding(‘utf-8’)来设置string对象默认的编码。

import sys
reload(sys)
sys.setdefaultencoding('utf-8') 

那么字符串如何在str和unicode间进行转换呢?python提供了两个函数:

 b = u'哈'     //b为unicode对象
 b.encode('utf-8')     //将b从unicode类型转为utf-8类型
 b.decode('utf-8')     //将b从utf-8类型转换为Unicode类型

三、window控制台输出

window控制台默认使用gbk编码。如果你设置了

# -*- coding: utf-8 -*-

python直接按照utf-8输出到控制台。所以我们可以改变文件编码:

# -*- coding: gbk -*-

或者使用unicode类型进行输出,会自动转换。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值