本文参考:http://blog.csdn.net/crazyhacking/article/details/39375535

chardet模块:http://blog.csdn.net/tianzhu123/article/details/8187470

字符集转换部分:http://blog.chinaunix.net/uid-26249349-id-2846894.html

python 转码 mysql 字符集

两个msyql库,字符集均为gbk,需要从A库中取数据,插入到B库中,其中某些字段值为中文。

代码

#!/usr/bin/env python
# _*_ encoding:utf- _*_ '''
author: tiantiandas
''' import sys
reload(sys)
sys.setdefaultencoding('gbk')
import MySQLdb def Connect_Mysql(sql,host):
db_info = {'host': host,
'user': 'test',
'db': 'TestDB',
'passwd': 'dnstest',
'charset':'gbk'} #很关键
try:
connect = MySQLdb.connect(**db_info)
cursor = connect.cursor()
cursor.execute(sql)
connect.commit()
result = cursor.fetchone()
return result
except Exception as e:
print e
sys.exit() def main():
domain = sys.argv[]
query = 'select Name,AdminDesc from EmailBox where Domain="{0}"'.format(domain)
try:
Name, AdminDesc = Connect_Mysql(sql=query,host="host1")
update = "update EmailBox set Name='{0}',AdminDesc='{1} where Domain='{2}'".format(Name,AdminDesc)
try:
print update
Connect_Mysql(sql=update,host='host2')
except Exception as e:
print e
except Exception as e:
print e if __name__ == '__main__':
main()

关键点

sys.setdefaultencoding('gbk')  :  这段代码让从A库拉出的数据,python会将其解码为成gbk。(大概是这个意思)

mysql编码: charset:gbk  :这个调整让写入到库中的数据字符集为gbk

所以如果拉出的数据是为了自己看的时候,就不需要 sys.setdefaultencoding('gbk')这段代码了 。

chardet 模块

chardet是字符编码识别的模块,使用如下:

#!/usr/bin/env python
# _*_ encoding:utf- _*_
import chardet a="天天"
print chardet.detect(a) 结果:
{'confidence': 0.75249999999999995, 'encoding': 'utf-8'}

如果要对一个大文件进行编码识别,如下的方法,可以提高识别速度:(相比第一种,这种确实会快一些)

import urllib
from chardet.universaldetector import UniversalDetector
usock = urllib.urlopen('http://www.baidu.com/')
#创建一个检测对象
detector = UniversalDetector()
for line in usock.readlines():
#分块进行测试,直到达到阈值
detector.feed(line)
if detector.done: break
#关闭检测对象
detector.close()
usock.close()
#输出检测结果
print detector.result 运行结果:
{'confidence': 0.99, 'encoding': 'GB2312'}

有了chardet模块,就可以识别获取数据的字符集格式,之后就可以将数据转换为想要的字符集格式了。

字符集格式转换

两个函数

decode:可以将数据解码为想要的字符集格式

encode:可以将数据编码为想要的字符集格式

python识别的是unicode,所以是用decode现将数据转换为unicode,之后再用encode将数据转换为想要的字符集。

测试代码

>>> name="天天"
>>> name
'\xe5\xa4\xa9\xe5\xa4\xa9' #天天 汉字的gbk码 >>> b=name.decode('gbk')
>>> b
u'\u6fb6\u2541\u3049' >>> c=b.encode('utf8')
>>> c
'\xe6\xbe\xb6\xe2\x95\x81\xe3\x81\x89' —————————————————————————— >>> '\xcc\xec\xcc\xec'.decode('gbk')
u'\u5929\u5929'
>>> '\xcc\xec\xcc\xec'.decode('gbk').encode('utf8')
'\xe5\xa4\xa9\xe5\xa4\xa9'
>>> '天天'
'\xe5\xa4\xa9\xe5\xa4\xa9'

python字符集的转换(mysql数据乱码的处理)的更多相关文章

  1. python 基础 9.3 mysql 数据操作

    #/usr/bin/python #coding=utf-8 #@Time   :2017/11/21 0:20 #@Auther :liuzhenchuan #@File   :mysql 数据操作 ...

  2. linux下插入的mysql数据乱码问题及第三方工具显示乱码问题

    一.lampp环境下的数据库乱码问题 问题描述: 在做mysql练习的时候发现新创建的数据库中插入数据表中的记录中文出现乱码的问题,如下图: 经过多方查证,整里如下文挡: 前提: 我自己的环境是使用的 ...

  3. Python之pandas读取mysql中文乱码问题

    # -*- coding: utf-8 -*- # author:baoshan import pandas as pd import pymysql config = { "host&qu ...

  4. mysql数据乱码

    更改数据库安装时的字符编码.打开mysql安装目录,找到my.ini文件,通过使用记事本的方式打开,将这里面的default-character-set=latin1修改成gbk,注意这里面有两处需要 ...

  5. python多进程并发插入mysql数据

    import pymysql import traceback from multiprocessing import Pool,Manager,cpu_count from multiprocess ...

  6. python使用requests请求的数据乱码

    1.首先进入目标网站,浏览器查看源码,找到head标签下面的meta标签,一般meta标签不止一个,我们只需找到charset属性里面的值即可 2.requests请求成功时,设置它的编码,代码如下 ...

  7. Python操作数据库之 MySQL

    Python操作数据库之MySQL 一.安装Python-MySQLdb模块 Python-MySQLdb是一个操作数据库的模块,Python 通过它对 mysql 数据实现各种操作. 如果要源码安装 ...

  8. 记录PHP post提交表单导入mysql中文乱码的问题

    记录记录PHP post提交表单导入mysql中文乱码的问题 关于乱码,这是个糟糕的问题!涉及到很多地方 解决思路:程序所涉及的环境字符集不一致导致 mysql出现乱码一般是mysql数据库内部的字符 ...

  9. 完美转换MySQL的字符集 Mysql 数据的导入导出,Mysql 4.1导入到4.0

    MySQL从4.1版本开始才提出字符集的概念,所以对于MySQL4.0及其以下的版本,他们的字符集都是Latin1的,所以有时候需要对mysql的字符集进行一下转换,MySQL版本的升级.降级,特别是 ...

随机推荐

  1. 使用vee-validate表单插件是如何设置中文提示?

    最近在写vue表单验证的时候,在网上找到一款不错的插件vee-validate,在使用的过程中发现配置不了中文提示,这就很苦恼了,基本上网上的配置办法我都看过,都是有问题的,比如这种 import z ...

  2. Netty4 学习笔记之二:客户端与服务端心跳 demo

    前言 在上一篇Netty demo 中,了解了Netty中的客户端和服务端之间的通信.这篇则介绍Netty中的心跳. 之前在Mina 中心跳的使用是通过继承 KeepAliveMessageFacto ...

  3. Codeforces 869E The Untended Antiquity

    题意:给定一个网格图,三种操作:1.在(r1,c1,r2,c2)处建围墙.2.删除(r1,c1,r2,c2)处的围墙.3.询问两点是否可达 思路比较巧妙,将围墙内的点赋加一个权值,询问的时候判断两个点 ...

  4. python 中Dict 转 Json

    近期在公司须要写个小工具.运用到的python,然后须要将Dict转成Json. 之前遇到转换Json失败,然后以为复杂的Entity结构.不能用Json的库Json.dump().进行转换. 自己些 ...

  5. Android系统匿名共享内存(Anonymous Shared Memory)Java调用接口分析

    一.Ashmem驱动程序 ~/Android/kernel/goldfish ----include ----linux ----ashmem.h ----mm ----ashmem.c 驱动程序具体 ...

  6. Uber的成功绝非偶然

    拥有打造一个初创企业并将其做强做大的梦想并不是难事,困难的是怎样将该梦想变成现实.娱乐媒体行业经常将企业成功的过程进行美化,干净利落的将企业成功前所经历的艰苦时刻进行大刀阔斧的剪裁,让其刚好可以达到拍 ...

  7. this的指向问题

    在 ES5 中,其实 this 的指向,始终坚持一个原理:this 永远指向最后调用它的那个对象. 例 1: var name = "windowsName"; function ...

  8. redis的set类型

    1.简单描述 redis的set类型是string类型数值的无序集合.set元素最大可以包含2的32次方减1个元素.由于set类型是通过hash table实现(旧版本是这样,新版本不确定是不是改用了 ...

  9. iOS 跳转到 App Store 下载评分页面

    html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...

  10. Android快速实现上传项目到Github

    本文为skylinelin原创,转载请注明出处! 一.简介 现在在网上浏览关于Git的文章,基本上都是使用命令行(Git Bash),命令行效率是很高的,但是有一定的复杂性,现在我们看如何用AS来讲项 ...