python 的编码问题
老是碰到这个问题,决定好好给整理一番思路。
翻阅资料和实践证明,以下论述为真理:

可以通过:sys.setdefaultencoding统一为decode和encode指定编码。默认情况下也是统一采用相同的方式decode和encode。
粗看有点脱裤子放屁的嫌疑:
假设我们的编码是gb2312,那么先转成unicode(decode过程)
然后再次转成gb2312(encode过程)。
实则不然,这是一个完全的设计,可以支持将某种编码: 外星编码 ---(decode)---->python能够识别的编码-----(encode)---->人类能够识别的编码
很多函数也支持在处理时指定编码,比如 simplejson的dumps函数,有个参数 enable_ascii (是否有ascii码进行decode、encode)
默认情况下,我们在py文件的头部统一指定编码,像下面这样:
# -*- coding:utf-8 -*-
然后有些时候,(比如在windows平台中文环境下),得到的编码如果不是utf-8编码,这个时候用python处理字符串,首先它会用utf-8进行decode,若字符串不是unicode码,那么就会报错。
那么,我们可能会想到,直接给你decode好, str.decode('已经的某种编码') ,
好吧,这样可以,但在接下来encode时会报错,因为默认会按照 utf-8进行encode。而且这个过程可能你控制不了,比如通过find进行查找。人家没提供参数给你设定encode时的编码。
这个时候解决方法有两个:
1. 将文件头默认的coding改成已知编码
# -*- coding:已知编码 -*-
注意,这种方式下的非英文字符,如果前面加了u,则表示unicode码,即python的内部编码,可能无法激活转码机制(不太确定)。
2. 采用sys.setdefaultencoding强行加载编码
import sys
reload(sys)
sys.setdefaultencoding(已知编码)
python 的编码问题的更多相关文章
- python Unicode 编码解码
1 #将Unicode转换成普通的Python字符串:"编码(encode)" 2 unicodestring = u"Hello world" 3 utf8s ...
- python的编码问题
本文简单介绍了各种常用的字符编码的特点,并介绍了在python2.x中如何与编码问题作战 :) 请注意本文关于Python的内容仅适用于2.x,3.x中str和unicode有翻天覆地的变化,请查阅其 ...
- python 字符编码练习
通过下面的练习,加深对python字符编码的认识 # \x00 - \xff 256个字符 >>> a = range(256)>>> b = bytes(a) # ...
- Python 字符编码 zz
http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American Stan ...
- python 之编码问题详解
前在一个项目中遇到用post提交一个xml,xml中含有中文,对于单独的py文件,使用urllib2.urlopen完全ok,但在django中使用就一直报编码错误,然后在网上看到这篇文章不错,决定m ...
- 19.python的编码问题
在正式说明之前,先给大家一个参考资料:戳这里 文章的内容参考了这篇资料,并加以总结,为了避免我总结的不够完善,或者说出现什么错误的地方,有疑问的地方大家可以看看上面那篇文章. 以下说明是针对于pyth ...
- Python字符编码详解
1. 字符编码简介 1.1. ASCII ASCII(American Standard Code for Information Interchange),是一种单字节的编码.计算机世界里一开始只有 ...
- python的编码
python的编码 1.概述 讲述编码,那么就要涉及到几个方面,包括系统中如何来显示字符,文件中如何来保存字符. 1.1 系统环境 在系统中显示字符,那么就必须要考虑到系统中使用的编码格式. 在lin ...
- 【转】Python字符编码详解
转自:http://www.cnblogs.com/huxi/archive/2010/12/05/1897271.html 1. 字符编码简介 1.1. ASCII ASCII(American S ...
- python与编码
Python中的文字对象 Python 3.x中处理文字的对象有str, bytes, bytearray. bytes和bytearray可以使用除了用作格式化的方法(format, format_ ...
随机推荐
- 复合sql
update select update bucp..Core_Flow_Opinion set useruid =(select user_uid from bua..bua_user b wher ...
- Callable、Future和FutureTask
创建线程的2种方式,一种是直接继承Thread,另外一种就是实现Runnable接口.这2种方式都有一个缺陷就是:在执行完任务之后无法获取执行结果. 如果需要获取执行结果,就必须通过共享变量或者使用线 ...
- 详解HTML中的window对象和document对象
Window -- 代表浏览器中一个打开的窗口: 对象属性 window //窗口自身 window.self //引用本窗户window=window.self window.name //为窗口命 ...
- BZOJ-2190 仪仗队 数论+欧拉函数(线性筛)
今天zky学长讲数论,上午水,舒爽的不行..后来下午直接while(true){懵逼:}死循全程懵逼....(可怕)Thinking Bear. 2190: [SDOI2008]仪仗队 Time Li ...
- href="javascript:void(0)"
javascript:是伪协议,表示url的内容通过javascript执行.void(0)表示不作任何操作,这样会防止链接跳转到其他页面.这么做往往是为了保留链接的样式,但不让链接执行实际操作,具体 ...
- Php学习之SESSION反序列化机制
在php.ini中存在三项配置项:session.save_path="" --设置session的存储路径session.save_handler="" -- ...
- linux学习笔记二-----文件权限管理
一.分析文件权限(ln -s 文件名 快捷方式名 用来创建文件的快捷方式,下方ll查看信息时会在第一个字符处显示l) [hjp@bogon ~]$ ll total 4 drwxrwxr-x. 2 h ...
- C标准函数库(常用部分)
- 移动端bug总结
1. 移动端按钮点击蓝框去除 button,input[type="button"] { outline:none; }
- C# ManualResetEvent 的方法介绍
名称 说明 1. Close 在派生类中被重写时,释放由当前 WaitHandle 持有的所有资源. (继承自 WaitHandle.)在XNA Framework中,此成员由 Close() ...