Python2字符串编解码问题

Python2字符串编解码问题

在python2中有两种类型的字符串:str和unicode。二者的转换如下:

​ unicode字符串通过encode函数转换为str字符串,称为编码;

​ str字符串通过decode函数转化为unicode字符串,称为解码.

下面以print打印为例进行说明:

当字符串为str类型时,操作系统直接将其交给终端进行显示;

当字符串为unicode类型时,操作系统会先将其编码为str类型,然后交给终端显示。

1. Non-ASCII character错误

例子:

import sys

print(sys.getdefaultencoding())
print(sys.stdout.encoding)  # 打印stdout的编码方式

a = "测试"
b = u"测试"
print(a)
print(b)

错误:

SyntaxError: Non-ASCII character '\xe6' in file t.py on line 7, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details

原因及改进:

该python文件存在中文字符,但是文件本身并未指定编码方式,此时python会按照系统的默认编码(ascii)执行该python文件,因此报错了。可以在文件的开头添加# coding:utf-8即可解决该问题。

2. UnicodeEncodeError错误

例子:

# coding: utf-8
import sys

print(sys.getdefaultencoding())
print(sys.stdout.encoding) # 打印stdout的编码方式

a = "测试"
b = u"测试"
print(a)
print(b)

错误:

UnicodeEncodeError: 'ascii' codec can't encode characters in position

原因及改进:

由于变量b为unicode类型,因此print(b)时操作系统需要先按照stdout的默认编码将其编码为str类型,最后交给终端显示;但是stdout的编码为ascii(通过调用sys.stdout.encoding), 因此报错。可以通过指明编码方式即print(b.encode('utf-8'))解决。

3. UnicodeDecodeError错误

例子:

# coding: utf-8
import sys

print(sys.getdefaultencoding())
print(sys.stdout.encoding)

a = "测试"
b = u"测试"
print(a.decode())
print(b.encode('utf-8'))

错误:

UnicodeDecodeError: 'ascii' codec can't decode byte 0xe6 in position

原因及改进:

执行print(a.decode())时由于没有指明解码方式,因此使用了sys.getdefaultencoding()的默认编码(ascii),因此报错;可以通过指定解码方式即print(a.decode('utf-8'))解决。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值