python中sys.setdefaultencoding('utf-8')的作用

在python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目标是Unicode,即编码unicode→str,解码str→unicode,其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,u.encode是将unicode类按给定的编码方式转换成字节流str。注意调用encode方法的是unicode对象,生成的是字节流;调用decode方法的是str对象(字节流),生成的是unicode对象。若str对象调用encode会默认先按系统默认编码方式decode成unicode对象再encode,忽视了中间默认的decode往往导致报错。

比如有如下代码:

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  s = ‘中文字符‘  # 这里的 str 是 str 类型的,而不是 unicode 
  s.encode(‘gb2312‘)

这句代码将 s 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此 
Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding为ANSCII,如果 s 不是这个类型就会出错。
  UnicodeDecodeError: ‘ascii‘ codec can‘t decode byte 0xe4 in position 
  0: ordinal not in range(128) 

对于这种情况,我们有两种方法来改正错误: 
1. 明确的指示出 s 的编码方式 

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  s = ‘中文字符‘ 
  s.decode(‘utf-8‘).encode(‘gb2312‘)

2. 更改 sys.defaultencoding 为文件的编码方式 

  #! /usr/bin/env python 
  # -*- coding: utf-8 -*- 
  import sys 
  reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入 
  sys.setdefaultencoding(‘utf-8‘)

  str = ‘中文字符‘ 
  str.encode(‘gb2312‘)

python中sys.setdefaultencoding('utf-8')的作用

时间: 2024-08-07 15:09:16

python中sys.setdefaultencoding('utf-8')的作用的相关文章

Python中 sys.setdefaultencoding("utf8") 的作用详解

在处理中文数据,经常加入下面的代码: import sys reload(sys) sys.setdefaultencoding("utf8") 设置python默认字节流编/解码器按照utf8解码方式,把字节流编/解码为unicode: 具体来说,所起到的作用,可以用下面两个错误来解释: 在将字节流使用str()方法转换为str对象时,会调用默认的encode函数,如果没有上述系统的默认编码设置,则自动使用'ascii' codecs进行编码,对于非ascii编码的数据,比如utf8

python 中 if __name__ == '__main__' 判断的作用

假设这样一个a.py文件 def fun1(): ........ def fun2(): ......... if __name__=='__main__': ......#执行的一些语句 当你执行这个a.py文件时, __name__ == '__main__'为真,后面的语句可以执行 当你在别的文件中import a文件,当做模块使用时,__name__ == '__main__'为假,后面的语句不执行了,只有前面定义的函数其作用. 如果没有这句话话,你在b.py中引用a的话,那些执行语句

python中sys.stdout、sys.stdin

1.如果需要更好的控制输出,而print不能满足需求,sys.stdout,sys.stdin,sys.stderr就是你需要的. 2.sys.stdout与print: 在python中调用print时,事实上调用了sys.stdout.write(obj+'\n') print 将需要的内容打印到控制台,然后追加一个换行符 以下两行代码等价: sys.stdout.write('hello' + '\n') print('hello') 3.sys.stdin与input sys.stdin

python中sys和os的区别

<os和sys的官方解释> ?os os: This module provides a portable way of using operating system dependent functionality. 这个模块提供了一种方便的使用操作系统函数的方法. ?sys sys: This module provides access to some variables used or maintained by the interpreter and to functions that

Python中sys模块

Python的sys模块提供访问解释器使用或维护的变量,和与解释器进行交互的函数.通俗来讲,sys模块负责程序与python解释器的交互,提供了一系列的函数和变量,用于操控python运行时的环境. (1)sys.argv          获取当前正在执行的命令行参数的参数列表(list) argv[0]表示代码本身的文件路径,最多只能传入两个命令行参数 (2) sys.modules.keys()   返回所有已经导入的模块列表 1 >>> import os,sys 2 >&

Python中 sys.argv[]的用法简明解释

因为是看书自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的.给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道"sys.argv[0]表示代码本身文件路径"这点,其实还是不明其意.后来经过大量努力,多方求教才真正明悟了,谨以记录和分享,希望能从另一个角度给同

Python中 sys.argv[]的杏彩平台出租用法简明解释

因为是看书杏彩平台出租haozbbs.comQ1446595067 自学的python,开始后不久就遇到了这个引入的模块函数,且一直在IDLE上编辑了后运行,试图从结果发现它的用途,然而结果一直都是没结果,也在网上查了许多,但发现这个问题的比较详细的解释只有一个版本,大部分都是转裁和复制的.给的都是简明python教程上那个一长串代码的例子,说看了就明白了,可我看得晕头转向的还是没真正明白,只知道"sys.argv[0]表示代码本身文件路径"这点,其实还是不明其意.后来经过大量努力,多

python中sys.argv[]的使用

sys.argv[]主要用于程序从外部获取参数.其参数个数可以是多个,组建成一个列表(list). 几个简单示例如下: fun_test.py: 1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import sys 5 info = sys.argv[0] 6 print info 我们在命令行中只是运行fun_test.py,发现此时返回函数本身. 注意参数为0! 进行相关修改: info = sys.argv[1] 此时运行fun_

python 中sys.stdout.write 和 print &gt;&gt; sys.stdout的区别

print >> sys.stdout的形式就是print的一种默认输出格式,等于print "%VALUE%" 看下面的代码的英文注释,是print的默认帮助信息 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 # coding=utf-8 import sys, os list1Display = ['1', '2', '3'] list2Display = ['abc', 'def', 'rfs'] while list2Displ