linux系统下 ‘ascii‘ codec can‘t encode characters in position 0-31: ordinal not in range(128)

linux系统下 ‘ascii’ codec can’t encode characters in position 0-31: ordinal not in range(128)

这个报错的意思是 ‘ascii ’无法编码中文 ,即中文无法以ascii编码。这说明有中文将要被存储在默认编码为ascii的文件中。
这一报错出现在linux下 执行python命令时,将输出结果重定向到log.txt文件时的报错。

[root@localhost ~]# cat test.py
#encoding:utf8
print '查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!'
[root@localhost ~]# vim test.py
[root@localhost ~]# cat test.py
#encoding:utf8
print u '查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!'
[root@localhost ~]# python test.py
  File "test.py", line 2
    print u '查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!'
                                                                                                             ^
SyntaxError: invalid syntax
[root@localhost ~]# vim test.py
[root@localhost ~]# python test.py
查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!
[root@localhost ~]# python test.py >log.txt
Traceback (most recent call last):
  File "test.py", line 2, in <module>
    print u'查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!'
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-31: ordinal not in range(128)
[root@localhost ~]# vim test.py
[root@localhost ~]#
[root@localhost ~]# cat test.py
#encoding:utf8
print '查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!'
[root@localhost ~]# python test.py
查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!
[root@localhost ~]# python test.py >log.txt
[root@localhost ~]# cat log.txt
查询粗粒度历史请求超时未返回数据,请检查粗粒度历史服务是否开启!
[root@localhost ~]#

linux系统的默认中文编码是utf8, 在windows下,中文的默认编码是gb2312

linux下:
在这里插入图片描述
windows下:
在这里插入图片描述

ascii 中不包含中文,因此在编码中文时,会报错,python默认认为源代码文件是asci编码

python默认将代码文件内容当作asci编码处理,但asci编码中不存在中文,因此抛出异常。

python 在字符串前面加‘u’的作用

解决 在windows下,控制台编码和文件编码不一致,导致中文在控制台打印为乱码

为了解决该问题,可以将编码设置为gbk,或者是在python文件中将中文字符串前加u

# -*- coding: utf-8 -*-
a = '哈'

这就是告知python我这个文件里的文本是用utf-8编码的,这样,python就会依照utf-8的编码形式解读其中的字符,然后转换成unicode编码内部处理使用。

不过,如果你在Windows控制台下运行此代码的话,虽然程序是执行了,但屏幕上打印出的却不是哈字。这是由于python编码与控制台编码的不一致造成的。Windows下控制台中的编码使用的

是gbk,而在代码中使用的utf-8,python按照utf-8编码打印到gbk编码的控制台下自然就会不一致而不能打印出正确的汉字。

Python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换

Python在向控制台输出unicode对象的时候会自动根据输出环境的编码进行转换,但如果输出的不是unicode对象而是普通字符串,则会直接按照字符串的编码输出字符串,从而出现上面的现象。

python 内部使用什么编码

python内部使用的是unicode编码
例如 在python源文件头设置了 -- coding: utf-8 --
这就是告知python我这个文件里的文本是用utf-8编码的,这样,python就会依照utf-8的编码形式解读其中的字符,然后转换成unicode编码内部处理使用。

很多人都搞不明白python字符串的decode和encode函数都是什么意思。这里简要说明一下。

decode是将普通字符串按照参数中的编码格式进行解析,然后生成对应的unicode对象,比如在这里我们代码用的是utf-8,那么把一个字符串转换为unicode就是如下形式:
在linux下

python 源文件的默认编码

python默认会认为源代码文件是asci编码

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值