(python 【print中文字符串编码问题】 " 'ascii' codec can't encode characters in position......."

python 查询当前环境下默认字符编码

在python中,操作中文字符串时经常会出现字符编码错误的情况。大部分问题是由于当前环境默认字符编码是ascii的问题(尤其是3版本以前的python)。
以下是查询当前环境默认字符编码的语句。

1.当前文件的编码格式

# -*- encoding==utf-8 -*-

在python3之前经常每个.py文件的第一行都会看到这个,它的实际作用是将当前py文件的编码格式设置为utf-8,如果没有这一行注释代码, 那么在执行当前的.py文件时候,只要该.py文件中有中文汉字就会ascii报错。
内容

2. 当前系统使用的默认编码

import sys
>>>sys.getdefaultencoding()       
'ascii'

python27版本中,当前环境的默认编码为ascii,每当你创建一个字符串str对象时,它的编码格式为默认的ascii格式。 可以用以下语句查询字符串的编码。

import chardet
a = '测试'
chardet.detect(a)

如果在执行字符串操作时候报了相关的ascii 错误,可以在该文件中添加以下语句,使当前系统的默认编码修改为utf-8;

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

python3之后的版本不需要,已经默认字符编码是utf-8

3. 标准输出默认编码 针对print()时候报的ascii错

>>>sys.stdout.encoding
'UTF-8'

在print一个中文字符串时候有时候也会报ascii的编码错误,这时候需要注意查看一下标准输出的默认字符编码是否不是utf-8 (一般所有的python环境标准输出的字符编码都是默认的utf-8,我在使用docker基于ubuntu16版本装的python35上鬼一样遇到这种问题了)
如果不是utf-8,就在该文件下加入以下内容:

import sys
import codecs
sys.stdout = codecs.getwriter("utf-8")(sys.stdout.detach())
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值