博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
浅析Python编码问题
阅读量:5249 次
发布时间:2019-06-14

本文共 2485 字,大约阅读时间需要 8 分钟。

浅析Python编码问题<?xml version="1.0" encoding="UTF-8"?>
http://www.th7.cn/Program/Python/201303/128631.shtml
2013-03-11 07:49:40--点击数:40
更多0
​ 首先这些问题只有在python2.X版本出现,因为3.X版本中python环境就只有unicode类型的字符串了,即所有程序中处理的都会自动转换 成unicode字符串。那么2.X的python程序开发中如何避免和理清编码问题呢?首先要保持一个良好的统一规则,不然一切都是白扯了,统一都用 utf-8是最好的。
1.处理非ASCII编码
Python的默认编码是ascii编码,当python中间处理非ASCII编码时,经常会出现如下错误:
UnicodeDecodeError: 'ascii' codec can't decode byte 0x?? in position 1: ordinal not in range(128)
0x??是超出128的数字
我们常在文件开头加上编码属性:# -*-  coding=utf8  -*-
所以无法处理其他编码时需要设置python的默认编码为所需要的编码,主要有以下2个方法:
01. 首选方法
import sys reload(sys)#重新加载sys
sys.setdefaultencoding('utf-8')#看你的编码需要utf-8还是gb2312
为什么要在调用setdefaultencoding时必须要先reload一次sys模块呢?因为这里的import语句其实并不是sys的第一次导入 语句,也就是说这里其实可能是第二、三次进行sys模块的import,这里只是一个对sys的引用,只能reload才能进行重新加载;那么为什么要重 新加载,而直接引用过来则不能调用该函数呢?因为setdefaultencoding函数在被系统调用后被删除了,所以通过import引用进来时其实 已经没有了,所以必须reload一次sys模块,这样setdefaultencoding才会为可用,才能在代码里修改解释器当前的字符编码。
02.方法2- 全局设置
在Python的Lib/site-packages文件夹下新建一个sitecustomize.py文件(sitecustomize.py是一个特殊文件, Python 在启动时将尝试加载该文件,因此所有代码都将运行该文件),即可自动设置代码。
import sys
sys.setdefaultencoding('gb2312')
3. 检查当前编码
import sys
sys.getdefaultencoding()
浅析Python编码问题 - InSun - Minghacker is Insun
2.字符编码判断
通过chardet可以实现对字符串/文件的编码检测。
01. chardet的安装
通过easy_install工具可以实现chardet的快速安装,命令如下:easy_install.exe chardet
02. chardet的使用
chardet可以直接用detect函数来检测所给字符的编码。函数返回值为字典,有2个元数,一个是检测的可信度,另外一个就是检测到的编码。
import urllib
import chardet
rawdata = urllib.urlopen('http://www.sina.com.cn/').read()
print chardet.detect(rawdata)
#result: {'confidence': 0.99, 'encoding': 'GB2312'}
3.文件处理的解码
response = urllib.urlopen(url)
text = response.read().decode("utf-8")#add by insun
按照第一步设置了utf8编码 然后写了个抓取豆瓣mp3的程序 存储下来的mp3名字都是乱码 打印出来缺全是正确的中文
娴锛璇.mp3
这时候显然就需要解码
decode("utf-8")
我们不走远 姑且不谈BOM头问题。
4.Python操作Mysql中文乱码问题
Python操作MySQL需要安装Python-MySQL
可以从网上搜索一下,和一般的Python包一样安装
安装好之后,模块名字叫做MySQLdb ,在Window和Linux环境下都可以使用
用下面几个措施,保证MySQL的输出没有乱麻:
    1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
    2 MySQL数据库charset=utf-8
    3 Python连接MySQL是加上参数 charset=utf8
    4 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf-8
import sys
import MySQLdb
reload(sys)
sys.setdefaultencoding('utf-8')
db=MySQLdb.connect(user='root',charset='utf8')
cur=db.cursor()
cur.execute('use mydb')
cur.execute('select * from mytb limit 100')
f=file("/home/user/work/tem.txt",'w')
for i in cur.fetchall():
    f.write(str(i))
    f.write(" ")
f.close()
cur.close()

转载于:https://www.cnblogs.com/highroom/p/e874c81400fad4d3fdfaf9d8aae9ead3.html

你可能感兴趣的文章
转:Web 测试的创作与调试技术
查看>>
python学习笔记3-列表
查看>>
程序的静态链接,动态链接和装载 (补充)
查看>>
关于本博客说明
查看>>
线程androidAndroid ConditionVariable的用法
查看>>
stap-prep 需要安装那些内核符号
查看>>
转载:ASP.NET Core 在 JSON 文件中配置依赖注入
查看>>
socket初识
查看>>
磁盘测试工具
查看>>
代码变量、函数命名神奇网站
查看>>
redis cli命令
查看>>
Problem B: 占点游戏
查看>>
python常用模块之sys, os, random
查看>>
HDU 2548 A strange lift
查看>>
Linux服务器在外地,如何用eclipse连接hdfs
查看>>
react双组件传值和传参
查看>>
BNU29140——Taiko taiko——————【概率题、规律题】
查看>>
[Kaggle] Sentiment Analysis on Movie Reviews
查看>>
价值观
查看>>
mongodb命令----批量更改文档字段名
查看>>