python编码问题

IdleMan 发布于 2012/12/26 21:42
阅读 688
收藏 1

python的编码问题一直迷糊得很。向各位请教一下。

1.gbk编码和utf-8编码的字符串进行比较(比如:=,>,<,find)时是比较的unicode吧?

经测试

#encoding:utf-8

pirnt 'abc' in 'abc中国人' #这个输出为true

2.正则表达式匹配时是对encode的字符进行比配,而不是unicode(不然为什么不同编码,对汉字的正则表达式匹配符不同)?

3.数据库相关

假设1:一个gbk编码的字符存入数据库,再查询出来的默认编码为A1

假设2:一个utf-8编码的字符存入数据库,再查询出来的默认编码是A2

请问,A1和A2的编码方式相同么?还是数据库为python提供的驱动程序在接受字符前都会先转换为unicode,然后给数据库,这样查询出来的编码都相同了?

4.对于python 2.x的编码问题,有什么方面需要特别注意的吗?



谢谢!

加载中
0
crifan
crifan

1. 你需要了解很多的背景知识,然后就才能真正明白Python中的编码。

2. 关于编码的背景知识:

字符编码详解

3.搞懂编码后,再去看Python中的字符串:

【整理】Python中字符编码的总结和对比:Python 2.x的str和unicode vs Python 3.x的bytes和str

4.然后再去看python 2.x中的常见问题及解答:

【总结】Python 2.x中常见字符编码和解码方面的错误及其解决办法

5.关于正则:

是去匹配字符的。

字符可能是不同编码,但是字符的值,是一样的。

所以:正则去匹配的话,是匹配字符的值,和编码无关。

6.关于你提到的那个字符编码声明:

【整理】关于Python脚本开头两行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件编码类型
相关的:

【整理】关于Python 3.x 中自动识别字符串编码,并正确在cmd中输出的各种情况的测试

总之:

你自己先搞懂了编码的知识,

对于别的地方,用到了字符编码的,正则搜索中,数据库中,之类的情况,才会真正理解。

0
mallon
mallon

1、拒绝GBK

2、迁移到Python 3

mallon
mallon
回复 @缪斯的情人 : 高质量的库都有Python3的版本
缪斯的情人
缪斯的情人
py3的库不是很少?
0
Soga
Soga

这个要给你讲明白,要打一大片

如果你没老代码要维护直接py3吧

编码问题多注意,其实也差不多

给你个建议,所有字符串统统转成unicode操作


IdleMan
IdleMan
看来只能转换成统一编码了,声明变量就转换,真麻烦啊
返回顶部
顶部