【python】mysqlDB转xml中的编码问题
2024-10-15 09:01:17
背景:有mysql数据库,将数据从数据库中读取,并存储到xml中
采用了MySQLdb和lxml两个库
具体编码处理过程如下:
. 指定mysql的编码方式
.取数据库data->判断data类型(type, isinstance)->| unicode字符->|有特殊控制字符->去除
| |正常->直接写入
|
|数字,日期等格式->转为字符串
|其他编码方式字符->decode
1.指定mysql编码方式
按照如下方式指定字符集:来源
db = MySQLdb.connect(..., charset='utf8')
如果不指定字符集,当默认字符集与实际数据字符集不同时,取出的数据会出现乱码。
2.取出数据后判断数据类型
为何要判断数据类型呢?因为lxml中的数据都要是字符类型的,而数据库中取出的数据有可能是int, long, date之类非数字类型,所以需要判断以便于后续处理
判断方式有两种:type和isinstance
>>> n = 911
>>> type(n)
<type 'int'>
>>> type(n) is int
True
a = 111
isinstance(a, int)
True
isinstance要优于type:区别就是 对于subclass之类的 type就不行了 来源
class A:
pass class B(A):
pass isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
注意判断时类型就直接写 int, str, unicode就可以,不要引号
3.去除unicode中的特殊字符
unicode中只支持以下字符
Char ::= #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
所以,需要把除上述范围之外的特殊字符都删掉,否则会报错
采用正则
content = re.sub(u'[^\u0020-\uD7FF\u0009\u000A\u000D\uE000-\uFFFD\u10000-\u10FFFF]+', '', text)
在来源中还有其他的方案,但是正则的速度快
4. 数字等类型转为字符串
直接str(),因为lxml支持ascii和unicode,所以用str直接转为ascii编码就可以
5. 其他编码方式decode
其实前面mysql中指定了编码方式后不应该有其他编码类型的,不过这里也介绍一下处理方法->decode
用decode将字符串解码为标准unicode
'abc'.decode('utf-8')
decode使用时需要给出字符的原本编码方式,如果不确定的话可以用chardet来判断
import chardet s = "abc"
code_method = chardet.detect(s)
print code_method
输出:
{'confidence': 1.0, 'encoding': 'ascii'}
最新文章
- 充电时间 Go中的数组、切片、map简单示例
- preparestatement可以避免注入
- 新版Microsoft Azure Web管理控制台 - Microsoft Azure New Portal - (1)
- php 字符串处理
- 7款HTML5的精美应用教程让你立即爱上HTML5
- [ An Ac a Day ^_^ ] hdu 5835 Danganronpa 令人发指
- 教你3分钟读懂HTML5语言的特点
- BZOJ_2124_等差子序列_线段树+Hash
- 生活英语读写MOOC-Literature Tutor-有声名著阅读推荐
- java 中的interface是否继承object
- java33
- Java笔记(十五) 并发包
- 【iCore4 双核心板_uC/OS-II】例程五:信号量——共享资源
- 复选框批量删除操作-jquery方式
- 整理mianshi
- Swift简单实现一个常规条款、免责声明文字+带有链接的展示形式
- WIKI常用的表格设计模板
- 在IE、fixfox、chrome等浏览器中ajax提交成功后,打开新标签页面被浏览器拦截问题[转]
- 状态开关(ToggleButton)
- oracle之 等待事件LOG FILE SYNC (awr)优化
热门文章
- LYDSY模拟赛day3 平均数
- js 日期处理,json处理
- 我们为之奋斗过的C#-----C#的一个简单理解
- setImageResource和setBackgroundResource的區別
- BZOJ1861——book
- Xcode 6制作动态及静态Framework和各种坑
- (转载)XML解析之-XStream解析
- ubuntu 出现g++ : Depends: g++-4.8 (>;= 4.8.2-5~) but it is not going to be installed
- ubuntu14.04显卡驱动问题(amd5600k集显7650d)
- 10个php笔试题