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就是如下形式:
python 源文件的默认编码
python默认会认为源代码文件是asci编码