PyQt QString 与 Python str&unicode
昨日,将许久以前做的模拟网页登录脚本用PyQt封装了一下,结果出大问题了, 登录无数次都提示登录失败!!而不用PyQt实现的GUI登录直接脚本登录无数次都提示登录成功!!心中甚是伤痛,于是探究起来,解决这一问题。
问题描述及证据如下:

上图是脚本MD5加密过程及结果


上图是PyQt GUI中获取密码框内容后加密的结果,其实现代码如下:
# -*- coding: gbk -*-
'''
Version : Python27
Author : Spring God
Date : 2013-6-28
''' from PyQt4 import QtCore, QtGui, Qt
from UI import Ui_MainWindow
import md5 class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def __init__(self, parent = None): # 初始化
super(MainWindow, self).__init__(parent)
self.setupUi(self) def login(self): password = self.lineEdit_Password.text()
print(md5.md5(password).hexdigest()) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv)
myapp = MainWindow()
myapp.show()
app.exec_()
两者完全不同,这是怎么回事儿,开始探寻之旅:
一开始在输出加密密码之前先输出了传入加密的字符串,都是123456,无果。
然后想到是不是文件或者字符编码的问题,于是在输出加密密码之前先输出了传入加密的数据类型,果然找到了:在Python中是str,而在PyQt中却是PyQt4.QtCore.QString,这是个神马东西,看起来像是PyQt自己搞的数据类型。
于是上网搜索一下:
关键词:PyQt QString str
找到了Python String和PyQt QString的区别(转)这篇文章,看了一下,大致是说这两种类型字符串在有些场合需要互相转换,而且对中文的支持不是很好。我想骂人了,这PyQt主管界面开发就是了嘛,干嘛要自己弄个数据类型,简直是让这些Python爱好者头痛。
关键词:Qt md5 加密
找到了一些解决方案:
http://stackoverflow.com/questions/5495281/generating-a-md5-hash-with-qt
QString encodedPass =QString(QCryptographicHash::hash(("myPassword"),QCryptographicHash::Md5));
QString blah =QString(QCryptographicHash::hash(("myPassword"),QCryptographicHash::Md5).toHex());
http://blog.csdn.net/ei__nino/article/details/7306819
QString usernamemd5;
QString pwdmd5;
QByteArray bb;
bb = QCryptographicHash::hash ( password.toAscii(), QCryptographicHash::Md5 );
pwdmd5.append(bb.toHex());
bb = QCryptographicHash::hash(username.toAscii(),QCryptographicHash::Md5);
usernamemd5.append(bb.toHex());
总归就是使用PyQt的md5加密模块是吧。但是如果遇到这样的问题就妥协,那就存在不断大量改动代码的情况了,而且不利于GUI移植。
突然看到上面代码中的password.toAscii(),这该是一个转换的函数,查了一下文档,还有一个toUtf8的函数等等,这下有救了。将QString转换成str试试吧。
# -*- coding: gbk -*-
'''
Version : Python27
Author : Spring God
Date : 2013-6-28
''' from PyQt4 import QtCore, QtGui, Qt
from UI import Ui_MainWindow
import md5 class MainWindow(QtGui.QMainWindow, Ui_MainWindow): def __init__(self, parent = None): # 初始化
super(MainWindow, self).__init__(parent)
self.setupUi(self) def login(self): password = self.lineEdit_Password.text()
print(md5.md5(password.toUtf8()).hexdigest()) if __name__ == "__main__": import sys app = QtGui.QApplication(sys.argv)
myapp = MainWindow()
myapp.show()
app.exec_()
果然,将图中蓝底白字的代码加上就正确了。特此记事,以待备用。
PyQt QString 与 Python str&unicode的更多相关文章
- PyQt的QString和python的string的区别
转载于http://blog.chinaunix.net/uid-200142-id-4018863.html python的string和PyQt的QString的区别 python string和 ...
- Python语言总结 4.2. 和字符串(str,unicode等)处理有关的函数
4.2.7. 去除控制字符:removeCtlChr Python语言总结4.2. 和字符串(str,unicode等)处理有关的函数Sidebar Prev | Up | Next4.2.7 ...
- python中unicode和str的组合
python中unicode对象和str对象拼接在一起,会自动将str对象转换成unicode对象 即:a="aa" b=u"bb" c=a+b type(c) ...
- python decode unicode encode
字符串在Python内部的表示是unicode编码,因此,在做编码转换时,通常需要以unicode作为中间编码,即先将其他编码的字符串解码(decode)成unicode,再从unicode编码(en ...
- python中unicode, hex, bin之间的转换
python中unicode, hex, bin之间的转换 背景 在smb中有个feature change notify, 需要改动文件权限dacl,然后确认是否有收到notify.一直得不到这个d ...
- Python str 与 bytes 类型(Python2/3 对 str 的处理)
本文均在 Python 3 下测试通过,python 2.x 会略有不同. 1. str/bytes >> s = '123' >> type(s) str >> ...
- Python中Unicode字符串
Python中Unicode字符串 字符串还有一个编码问题. 因为计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理.最早的计算机在设计时采用8个比特(bit)作为一个字节(byte ...
- #python str.format 方法被用于字符串的格式化输出。
#python str.format 方法被用于字符串的格式化输出. #''.format() print('{0}+{1}={2}'.format(1,2,3)) #1+2=3 可见字符串中大括号内 ...
- Python str() 函数
Python str() 函数 Python 内置函数 描述 str() 函数将对象转化为适于人阅读的形式. 语法 以下是 str() 方法的语法: class str(object='') 参数 ...
随机推荐
- rsync本地及远程复制备份【原创】
1.安装rsyncyum instsall rsync 2.本地复制 rsync -auq --progress --delete /tongbu1/ /tongbu2/ rsync -auq --p ...
- 一步一步搭建11gR2 rac+dg之配置单实例的DG(八)【转】
RAC主库配置单实例ActiveDataguard 本文文档结构: 这里配置的过程中需要注意的一项是多看看rac1和rac2以及dg的告警日志会对配置过程有更深刻的理解...配置oracle rac的 ...
- mysql测试工具 -> mysqlslap
一.简介 mysqlslap是mysql自带的基准测试工具 优点:查询数据,语法简单,灵活容易使用.该工具可以模拟多个客户端同时并发的向服务器发出查询更新,给出了性能测试数据而且提供了多种引擎的性能比 ...
- spring 学习之二 AOP编程
AOP概念 AOP, aspect oriented programing,翻译过来就是面向切面编程的意思,那什么叫面向切面编程呢?相对于之前传统的纵向继承方式来对原有功能进行功能扩展, 面向切面编程 ...
- FTRL算法
稀疏解的作用:内存和时间啊 实际的互联网广告应用需要的是快速地进行model的更新.为了保证快速的更新,训练样本是一条一条地过来的,每来一个样本,model的参数对这个样本进行一次迭代,从而保证了mo ...
- Javascript 跨域访问解决方案 总结
在客户端编程语言中,如javascript和ActionScript,同源策略是一个很重要的安全理念,它在保证数据的安全性方面有着重要的意义.同 源策略规定跨域之间的脚本是隔离的,一个域的脚本不能访问 ...
- [android]Intent跳转新的Activity可以传递数据过去
两种方式: 一,直接通过Bundle对象来传递: 如果我们想要给“收件人”Activity说点什么的话,那么可以通过下面这封“E-mail”来将我们的消息传递出去 Intent intent=new ...
- 监控SQLServer作业执行情况脚本
SELECT [sJOB].[job_id] AS [作业ID] , [sJOB].[name] AS [作业名] , CASE WHEN [sJOBH].[run_date] IS NULL OR ...
- 1、树莓派3B开箱+安装系统
说白了,树莓派就是英国人为学生开发的一款微型电脑.电脑能干什么,那就多了.英国小学生有用树莓派做气象站的,有检测家长开门回家的(可以安心玩游戏了),总之脑洞有多大就可以玩多大. 了解到了之后就一直心水 ...
- Datagridview 中的checkbox 选中或勾选状态失效
1.问题描述,先选中第一行,再取消选择,然后点击部门全选,第一行没有打钩,状态是不选中的状态. 2.分析代码 先选中第一行,单元格的单击事件中 改变选中状态为1,第一行取消选择,单元格的单击事件中 改 ...