本文参考: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. JVM内存模型及垃圾回收的研究总结

    Java内存模型 总的来说就分为两个区域,堆内存(Heap)和非堆内存(No-Heap),非堆内存又称为永久代(Permanent),永久的意思其实是针对于垃圾回收器来说的,表示这部分内容不需要回收. ...

  2. MySQL 索引管理与执行计划

    1.1 索引的介绍 索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息.如果想按特定职员的姓来查找他或她,则与在表中搜索所有的行相比,索引有助于更快地获取信息. ...

  3. JPA学习笔记(8)——映射双向一对多关联关系

    双向一对多关联关系 前面的博客讲的都是单向的,而本问讲的是双向的(双向一对多 = 双向多对一) 什么是双向? 我们来对照一下单向和双向 单向/双向 User实体类中是否有List< Order& ...

  4. google protocol buffer的原理和使用(四)

    有个电子商务的系统(如果用C++实现).当中的模块A须要发送大量的订单信息给模块B.通讯的方式使用socket. 如果订单包含例如以下属性: ----------------------------- ...

  5. LDA主题模型学习笔记5:C源代码理解

    1.说明 本文对LDA原始论文的作者所提供的C代码中LDA的主要逻辑部分做凝视,原代码可在这里下载到:https://github.com/Blei-Lab/lda-c 这份代码实现论文<Lat ...

  6. [UWP]本地化入门

    1. 前言 上一篇文章介绍了各种WPF本地化的入门知识,这篇文章介绍UWP本地化的入门知识. 2. 使用resw资源文件实现本地化 在以前的XAML平台,resx资源文件是一种很方便的本地化方案,但在 ...

  7. Python笔记·第二章—— Python的编码问题(一)

    一.什么是编码 可以说,计算机是一个即聪明又笨蛋的家伙.说它聪明,是因为他可以做很多事情,它的强大无需多说,大家应该都有所了解以及感受.但是为什么说它又是个笨蛋呢,因为我们在电脑上写出的每一个字,保存 ...

  8. Centos 7 安装 PostgreSQL

    本文只讲PostgreSQL在CentOS 7.x 下的安装,其他系统请查看:https://www.postgresql.org/download PostgreSQL 所用版本为:PostgreS ...

  9. cs231n --- 3 : Convolutional Neural Networks (CNNs / ConvNets)

    CNN介绍 与之前的神经网络不同之处在于,CNN明确指定了输入就是图像,这允许我们将某些特征编码到CNN的结构中去,不仅易于实现,还能极大减少网络的参数. 一. 结构概述 与一般的神经网络不同,卷积神 ...

  10. 使用docker+consul+nginx集成分布式的服务发现与注册架构

    一.环境说明: 1.一台虚拟机,该系统已经装好了docker: ip 192.168.10.224 虚拟网卡,与主机互通 操作系统rhel6 内核 2.6.32  64位 docker版本 1.7.1 ...