今天碰到了 python 编码问题, 报错信息如下
Traceback (most recent call last):
  File "ntpath.pyc", line 108, in join
UnicodeDecodeError: 'ascii' codec can't decode byte 0xa1 in position 36: ordinal not in range(128)

显然是当前的编码为ascii, 无法解析0xa1(十进制为161, 超过上限128). 进入python console后, 发现默认编码确实是 ascii, 验证过程为:

>>>import sys
>>>sys.getdefaultencoding()
#输出为ascii.

#在使用 sys.setdefaultencoding('utf8'), 报错!
>>>sys.setdefaultencoding('utf8') 
AttributeError: 'module' object has no attribute 'setdefaultencoding'

google 到一个 limodou 回复的帖子, http://www.linuxforum.net/forum/showflat.php?Cat=&Board=python&Number=580942&page=15&view=collapsed&sb=5&o=

limodou讲到, sys.setdefaultencoding 方法在python导入 site.py 后就删除了, 不能再被调用了.  在确定sys已经导入的情况下, 可以reload sys这个模块, 之后, 再 sys.setdefaultencoding('utf8') 
>>>reload(sys)
>>>sys.setdefaultencoding('utf8')

确实有效, 根据 limodou 讲解,  site.py 是 python 解释器启动后, 默认加载的一个脚本. 如果使用 python -S 启动的话, 将不会自动加载 site.py.

上面写的挺啰嗦的.

==================================
如何永久地将默认编码设置为utf-8呢?  有2种方法: 
==================================
第一个方法<不推荐>: 编辑site.py, 修改setencoding()函数, 强制设置为 utf-8 
第二个方法<推荐>: 增加一个名为 sitecustomize.py, 推荐存放的路径为 site-packages 目录下
sitecustomize.py 是在 site.py 被import 执行的, 因为 sys.setdefaultencoding() 是在 site.py 的结尾处被删除的, 所以, 可以在 sitecustomize.py 使用 sys.setdefaultencoding(). 
#file name:  sitecustomize.py
import sys  
sys.setdefaultencoding('utf-8')

[转]修改python默认的编码方式的更多相关文章

  1. 【修改编码】修改tomcat默认的编码方式

    默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找到如下代码:    <Connector port="8080& ...

  2. 修改tomcat默认的编码方式

    tomcat8以后默认编码格式是utf-8:7之前的都是iso8859-1 如果默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找 ...

  3. 【开发笔记】- 修改tomcat默认的编码方式

    tomcat8以后默认编码格式是utf-8:7之前的都是iso8859-1 如果默认情况下,tomcat使用的的编码方式:iso8859-1 修改tomcat下的conf/server.xml文件 找 ...

  4. ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法

    ubuntu下修改mysql默认字符编码出现的Job failed to start解决办法 前几天卸掉了用了好多年的Windows,安装了Ubuntu12.04,就开始各种搭环境.今天装好了MySQ ...

  5. 修改MySQL默认字符集编码

    好记心不如烂笔头,很多东西当时没记下来,过了就忘了,下次用到时又得浪费好多时间才能解决.今天又遇到修改MySQL默认字符集编码的问题,折腾了半天解决了,赶快记录下来,以后就不用每次折腾了. 查看MyS ...

  6. 永久修改python默认的字符编码为utf-8

    这个修改说来简单,其实不同的系统,修改起来还真不一样.下面来罗列下3中情况 首先所有修改的动作都是要创建一个叫 sitecustomize.py的文件,为什么要创建这个文件呢,是因为python在启动 ...

  7. python中字符串编码方式小结

    Python2中字符串的类型有两种:str和unicode,其中unicode是统一编码方式,它使得字符跟二进制是一一对应的,因此所有其他编码的encode都从unicode开始,而其他编码方式按照相 ...

  8. 修改mysql默认字符编码出现的Job failed to start解决方法

    5.5以后的版本对字符编码方式修改的办法,原来在[mysqld]下的修改已经发生了变化,正确方式如下: [mysqld]下添加的应该为: character-set-server=utf8 colla ...

  9. JAVA中默认的编码方式

    转:http://blog.csdn.net/scyatcs/article/details/31356823 编码问题存在两个方面:JVM之内和JVM之外.1.Java文件编译后形成class这里J ...

随机推荐

  1. 用C++实现的八皇后问题

    我是一个C++初学者,控制台实现了一个八皇后问题. 代码如下: //"八皇后问题"V1.0 //李国良于2017年1月11日编写完成 #include <iostream&g ...

  2. 0116MySql主从复制监控

    如何自动化监控mysql主从服务-- 第一步创建目录mkdir -p /tmp/mysql/masterslave #日志存放目录在/root下面创建sh目录 #存放执行的SHELL脚本 -- 第二步 ...

  3. crontab 定时的陷阱

    crontab  任务不执行,首先要查询一下cron任务的宿主和语法: (1). /etc/cron.d/cron_zengtai   这个文件必须是 root:root  否则cron_zengta ...

  4. Writing clean code is what you must do in order to call yourself a professional.

    Clean Code  A Handbook of Agile Software Craftsmanship

  5. mysql 查看数据库中所有表的记录数

    use information_schema; SELECT DISTINCT t.table_name, t.engine '表引擎', t.table_rowsFROM TABLES tWHERE ...

  6. java的三种构造器

    重叠构造器:不可取: javabeans模式:不可取: Builder模式:可取.

  7. table表头thead固定

    <html> <head> <meta charset="utf-8"/> <script type="text/javascr ...

  8. Proteus中MATRIX-8X8 LED灯的连接

    上面8个引脚用于选择行,低电平有效.下面8个引脚用于选择列,高电平有效. 经测试,红色点阵LED与之相反,是上面的引脚用于选择列,且高电平有效:下面的引脚用于选择行,低电平有效. 在AT89C51单片 ...

  9. Elastarchsearch安装搭建(一)

    Elasticsearch是一个实时分布式搜索和分析引擎.一个基于Apache Lucene(TM)的开源搜索引擎.无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进.性能最好的.功能最全 ...

  10. 关于mongodb的一些笔记

    1.以服务的形式安装mongodb dos -- 进入到mongodb的bin目录下,执行 D:\mongodb\bin>mongod --logpath D:\mongodb\logs\mon ...